【发布时间】: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 >> 0时,你正在检查最不重要的位......就像沃尔兹说的那样,看看你的代码和 想想。
标签: c bit-manipulation