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

标签 c bit-manipulation

我有一个名为“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

我的目标只是能够检查是否已设置位。

最佳答案

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

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

关于c - 为什么这个位函数以相反的顺序返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486843/

相关文章:

在结构上创建双指针以按索引使用(类似于数组,但最大大小未知)

c# - HasFlag 无法识别角色分配

c - 如何在 C 中存储自定义对象(结构)?

c - 使用数组实现堆栈

c - 插入排序链表

c - 使用有限的按位运算符在 C 中提取字符位

c - 计算填充字节数的最佳方法是什么

c - pthread_join() 并在 main 中休眠

c - 阐明按位运算符,非负操作数和类型转换如何交互

algorithm - 如何修改id混淆混洗位算法中的掩码?