为什么这个位函数以相反的顺序返回?

时间:2014-03-18 17:34:32

标签: c bit-manipulation

我有一个名为“bitarray”的变量,它是一个'unsigned long'类型的数组。这最初都是二进制格式的零。

0000000000000000000000000000000

我使用遮罩将其更改为其他数字。

mask = 0x1FFFFFF; 
bitarray[n] = bitarray[n] ^ mask; 
printBinary(bitarray[n]);

结果:

0000000111111111111111111111111

然后我使用位移来检查每个位的值并打印出它设置的内容。

int i;
for(i=0; i<31; i++) {   
    if((val>>i) & 1)  {
        printf("1");
    } else {
        printf("0");
    }
}

问题是打印方式完全相反:

1111111111111111111111111000000

我的目标是能够检查是否设置了一个位。

2 个答案:

答案 0 :(得分:1)

您想先打印最重要的位。也许尝试这样的事情:

int i;
for(i=31; i>=0; i--) 
    printf("%d", (val>>i) & 1);
printf("\n");

答案 1 :(得分:1)

切换循环顺序

// for(i=0; i<31; i++) { 
for(i=31; i >= 0; i--) {