解释输出——我不明白 i 的值将如何改变

Explain the output — I don't understand how the value of i will be changed

/*how will the value of i be changed in output*/

void main()
{
    int i = 150;
    char c = i;
    i = c;
    printf("%d", i);
}

因为char只能放一个字节的数据,-128到127,所以在里面存150的值会导致符号溢出,得到负数

符号溢出导致未定义的行为,然而,经常发生的是:

直到最大正值127,一切正常。

分配 128 时,符号位被设置并且报告的值翻转为 -128。

每超过此值 1,该值也会增加。

所以,在你的情况下分配 150,在 128 位翻转,你仍然有 22 离开 (150 - 128),所以最终值可能是 -106 (-128 + 22)。

事实上,如果我尝试的话,这就是我在 windows 和 Visual Studio 上得到的结果。但同样,这是未定义的行为,因此不能保证当符号位溢出时系统会做什么。