我很好奇C的位运算符在字符上的行为。
#include <stdio.h>
int main()
{
int x = 108;
x = x<<1;
printf("%d\n", x);
char y = 108;
y = y<<1;
printf("%d", y);
//printf("%d", y<<1);
return 0;
}这里,如果我像这样传递,y= y<<1,它的输出是-40,当我直接打印它时,
printf(%d,y<<1);
它的产量是216。
我怎么能模拟它?
发布于 2020-12-21 18:48:42
注意,对<<类型实际上没有char操作-- <<的操作数被提升为(至少) int类型,其结果类似地是一个int。
因此,当您执行y = y << 1时,您将操作的int结果截断为(已签名的) char,这将留下最重要的位(符号位)集,因此它被解释为负值。
但是,当您将y << 1直接传递给printf时,生成的int将保持不变。
发布于 2020-12-21 18:45:43
y<<1生成一个int。为了获得-40,您将其隐式转换为一个char。在您的printf中,您需要显式地执行强制转换:(char)(y<<1)
https://stackoverflow.com/questions/65398186
复制相似问题