C的char溢出

一、程序片段

    char a = (unsigned short) 200;
    printf("%d\n", a);
    char b =  200;
    printf("%d\n", b);

输出

-56
-56

二、结果解释

char分配的是一字节无符号整数,范围通常是 -128 到 127。
赋予200时,首位1被解释为符号位。
于是我们得到一个数的补码为:

1 100 1000

它的反码:

1 100 0111

得到原码:

1 011 1000

计算即得到-56

在 C 语言中,char 类型是一个有符号字符类型,范围通常是 -128 到 127。当你给 char 类型的变量赋予一个超出其表示范围的值时,它可能会发生溢出。

在你的代码中,将整数 200 赋值给 char 类型的变量 b,这个值超过了 char 类型的范围。根据有符号整数的溢出规则,当赋给有符号类型的变量一个超过其表示范围的值时,结果是未定义的。

因此,对于这种情况,输出的结果是不确定的,可能会因编译器实现而异。它可能输出 -56,这是因为 200 被解释为一个溢出的有符号 char 值,也可能输出其他的值。

你可能感兴趣的:(#,C++语法,c语言,chrome,javascript)