这是一个简单的代码:
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
那为什么会出现这种不同的结果?
答案 0 :(得分:3)
你宣布:
char a = '10';
char b = '6';
在这种情况下,b
为00110110
(0x36
),因为您声明的是字符,而不是整数。
我也不知道为什么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
10
和6
的纸上解决了此问题,而不是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);