我在缓冲区中对2个字节进行逐位运算,然后将结果存储在变量中。但是,即使我期望零值,我有时会得到变量的非零值。
我很抱歉无法发布整个代码,但代码对我来说太长了。
代码的相关部分如下。
unsigned int result = 0;
long j = 0, length;
unsigned char *data;
data = (unsigned char *)malloc(sizeof(unsigned char)*800000);
// populate data[]
while (j < length)
{
result = (unsigned int)(((data[j]^0xb6)<<8)|(data[j+1]^0xab));
if (result > 0)
...
(j gets incremented here)
}
当result
和data[j]
分别为0xb6和0xab时,我期待data[j+1]
为零,大多数时候情况就是如此。但是,对于j
的某些值,我的result
奇怪地不为零。
j = 62910, result = 64
j = 78670, result = 64
j = 100594, result = 64
j = 165658, result = 512
j = 247990, result = 128
j = 268330, result = 512
j = 326754, result = 1
j = 415874, result = 256
j = 456654, result = 1024
j = 477366, result = 512
看起来这些奇怪的result
值都是2的幂,1位出现在unsigned int
的某处。
我没有在代码中的任何其他位置更改result
的值,当我打印出(unsigned int)(((data[j]^0xb6)<<8)|(data[j+1]^0xab))
时,我得到0
,但不知何故,当它被存储到result
,它不再为零。
我真的不明白可能出现的问题。