我正在看一段代码:
int result = 0 ;
char byte = foo[j]
for (i = 7 ; i>0 ; i--) {
byte = (byte & ~0x1)>>1 ;
result+= array[i] * (byte & 1) ;
}
我知道这段代码的目的是将字节中相应位设置为1的数组元素相乘。
我不明白为什么~0x1是必要的,因为每次,我只考虑最后一位
有什么想法吗?
答案 0 :(得分:1)
某些编译器实现>>通过旋转位而不是移动它们。这样可以防止这种情况(如果最后一位设置为0,那么即使将转换实现为轮换,答案也将保持正确)
答案 1 :(得分:-2)
(byte & ~0x1)>>1
和byte>>1
都将字节1位右侧移位
区别在于(byte & ~0x1)>>1
只处理字节的最低8位,byte>>1
不再关心。
当byte实际上是 BYTE 时,它们是相同的
或者字节只是int(long int)类型的名称,它们是非常不同的
(byte & 0xFF) >> 1
与(byte & ~0x1) >>1
功能相同。