C

我已经用 C 编写了代码

#include<stdio.h>

int main()
{
    char a = 128;
    char b = -128;
    printf("%c",a);
    printf("%c",b);
}

上面代码的输出是ÇÇ
使用 128 或 -128 输出结果是一样的。为什么?如果可能,请解释使用二进制。

zhoulang914 回答:C

有符号的 char 类型通常具有 -128 到 127 的范围。由于 128 在此范围之外,您的编译器将其转换为具有相同 8 位位模式的值,这是 - 128.

,

文字 -128 的类型为 int 并且在 32 位 2 的补码表示中具有位模式:

1111 1111 1111 1111 1111 1111 1000 0000

在这种情况下,当您将其分配给 char 时,存在隐式转换(强制转换),因此仅使用 LSB 1000 000 或十进制数 128。因此结果相同.

严格来说,如果 charsigned,则行为是实现定义的,并且标准以有些神秘的“as-if”术语为 unsigned char 定义行为. char 本身是有符号还是无符号本身是实现定义为实际宽度,因此是 char 的范围。在实践中,虽然上述解释是在这种情况下发生的情况,并且是使用 8 位 char 的任何实现最可能的行为,但 char 是有符号还是无符号都没有区别。

本文链接:https://www.f2er.com/4305.html

大家都在问