Bitoperation结果不如预期

时间:2014-02-21 18:51:33

标签: c bit

这是一个简单的代码:

char a = '10';
char b = '6';
printf("%d\n", a | b);
printf("%d\n", a ^ b);
printf("%d\n", a << 2);

,输出

54
6
192

现在我的问题是,为什么这些结果。我在纸上检查了它,我有什么是

1110 for a | b = 14
1100 for a ^ b = 12
00101000 for a << 2 = 40

那为什么会出现这种不同的结果?

3 个答案:

答案 0 :(得分:3)

你宣布:

char a = '10';
char b = '6';

在这种情况下,b001101100x36),因为您声明的是字符,而不是整数。

我也不知道为什么char a = '10';甚至有效,因为单引号(')仅用于创建单个字符文字而你在那里声明两个字符。

正确的方法应该是:

char a = 10;
char b = 6;
printf("%d\n", a | b);
printf("%d\n", a ^ b);
printf("%d\n", a << 2);

答案 1 :(得分:2)

您在int 106的纸上解决了此问题,而不是char s '10' = 49 or 48(多字符常量的解释取决于编译器)和'6' = 54

答案 2 :(得分:1)

这是因为您将变量定义为字符(char)但在笔记本中 你通过将它们视为整数(int)来计算结果 如果您想要正确答案,请尝试以下代码并检查 -

int a = 10; 
int b = 6;
printf("%d\n", a | b);
printf("%d\n", a ^ b);
printf("%d\n", a << 2);