这个结果为什么是127啊,c++小白求解

这个结果为什么是127啊,c++小白求解

你看下面分3步输出你就看得很清楚了。

4字节整数-129得16进制是0xffffff7f,赋给字节类型,丢掉了高位,保留了低字节 0x7f,然后按%d输出,当整数对待,扩展到4字节,成为0x0000007f,就是127了。

#include <stdio.h>

int main() {
    signed char a = -129;
    printf("%x\n", -129);
    printf("%x\n", a);
    printf("%d\n", a);
    return 0;
}

// Output
ffffff7f
7f
127

 

 

下面这个可能更迷惑人。字符变量 a 的16进制值 0x81,扩展成4字节整数时带符号的,所以高位全时1,成为 0xffffff81,所以输出-127。

#include <stdio.h>

int main() {
    signed char a = 129;
    printf("%x\n", 129);
    printf("%x\n", a);
    printf("%d\n", a);
    return 0;
}

// Output 
81
ffffff81
-12