【问题标题】:Why is this bit function returning in reverse order?为什么这个位函数以相反的顺序返回?
【发布时间】:2014-03-18 17:34:32
【问题描述】:

我有一个名为“bitarray”的变量,它是一个“无符号长”类型的数组。这最初是二进制格式的全零。

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

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

【问题讨论】:

  • 看看你的代码并思考。
  • 代码返回正确的位。您只需要以相反的顺序要求它们。你想先打印哪位?
  • 我想先检查最左边的位。
  • 你想先检查最重要的位......但是当你做val &gt;&gt; 0时,你正在检查最不重要的位......就像沃尔兹说的那样,看看你的代码和 想想

标签: c bit-manipulation


【解决方案1】:

您想先打印最高有效位。也许尝试这样的事情:

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

【讨论】:

  • 在同一秒内回答 2 个问题!
【解决方案2】:

切换循环顺序

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

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多