C中的按位运算符

时间:2015-04-10 14:10:48

标签: c++ c bitwise-operators

我在下面的代码段中的~如何在C中工作时遇到问题:

#include <stdio.h>
int main()
{
unsigned char x[256];
int i = 0;
for(i=0; i<256; i++)
    x[i] = i;

unsigned char index = 1;
unsigned char y = 0;

//Case 1
y = x[~index];
printf("%u\n", y);
//Output: 0

//Case 2
y = x[(unsigned char) ~index];
printf("%u\n", y);
//Output: 254    

//Case 3
y = x[index ^ 0xFF];
printf("%u\n", y);
//Output: 254

return 0;
}

案例1 案例2 案例2 案例3 时,案例1 不会返回正确的结果。在我看来,~index被解释为 int 而不是 char 。这样就可以了,但是我不明白为什么 unsigned char 在按位期间得到一个扩展名。

编译使用:gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)

0 个答案:

没有答案