如何从C中的整数中提取位?

如何从C中的整数中提取位?,c,binary,bit,bit-shift,C,Binary,Bit,Bit Shift,所以我尝试使用位移位和掩蔽从32位二进制整数中提取位,但我明显偏离了1 #include <stdio.h> int main (){ int number = 87; //0000 000 0000 0000 0000 0000 0101 0111 int i; int bit; int g = 0; for(i = 32; i > 0; i--){ if(g%4==0 && g!=0){ printf(" ");

所以我尝试使用位移位和掩蔽从32位二进制整数中提取位,但我明显偏离了1

#include <stdio.h>

int main (){

  int number = 87; //0000 000 0000 0000 0000 0000 0101 0111
  int i;
  int bit;
  int g = 0;

   for(i = 32; i > 0; i--){

   if(g%4==0 && g!=0){
     printf(" ");
   }
    g++;
    bit = (number >> i) & 1;
    printf("%d", bit);
  }

  printf("\n");
return 0;
}
#包括
int main(){
int number=87;//0000 0101 0111
int i;
整数位;
int g=0;
对于(i=32;i>0;i--){
如果(g%4==0&&g!=0){
printf(“”);
}
g++;
位=(数字>>i)&1;
printf(“%d”,位);
}
printf(“\n”);
返回0;
}

您的代码中缺少逻辑

使用

而不是

for(i **= 32**; i **>** 0; i--)

注释如果它对您有效

您是否尝试过在调试器中逐行遍历代码?另外,请记住位数是以零为基础的。第一位是数字
0
,32位数字的最后一位是数字
31
。你是怎么做到的?啊,没关系。愚蠢的loop把我甩了。谢谢你的提示
for(i **= 32**; i **>** 0; i--)