位操作(移位)

时间:2015-01-18 06:20:43

标签: c bits

我正在看一段代码:

int result = 0 ;
char byte = foo[j]
for (i = 7 ; i>0 ; i--) {
   byte = (byte & ~0x1)>>1 ;
   result+= array[i] * (byte & 1) ;
}

我知道这段代码的目的是将字节中相应位设置为1的数组元素相乘。

我不明白为什么~0x1是必要的,因为每次,我只考虑最后一位

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

某些编译器实现>>通过旋转位而不是移动它们。这样可以防止这种情况(如果最后一位设置为0,那么即使将转换实现为轮换,答案也将保持正确)

答案 1 :(得分:-2)

(byte & ~0x1)>>1byte>>1都将字节1位右侧移位 区别在于(byte & ~0x1)>>1只处理字节的最低8位,byte>>1不再关心。
当byte实际上是 BYTE 时,它们是相同的 或者字节只是int(long int)类型的名称,它们是非常不同的 (byte & 0xFF) >> 1(byte & ~0x1) >>1功能相同。