字符中的位运算

Bitwise operation in character

我很好奇 C 在 Character 上的按位运算符的行为。

#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.

如何模拟?

y<<1 生成 int。要获得 -40,您将其隐式转换为 char。在你的 printf 案例中,你需要明确地进行转换:(char)(y<<1)

请注意,char 类型实际上没有 << 操作 - << 的操作数被提升为(至少)int 类型,结果类似地,int.

因此,当您执行 y = y << 1 时,您会将运算的 int 结果截断为(带符号的)char,从而留下最高有效位(符号位)设置,所以被解释为负值。

但是,当您将 y << 1 直接 传递给 printf 时,结果 int 保持不变。