按位运算中的结果不正确

时间:2014-10-29 10:45:02

标签: variables storage bitwise-operators

我在缓冲区中对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)
}

resultdata[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,它不再为零。

我真的不明白可能出现的问题。

0 个答案:

没有答案