解释输出 - 我不明白i的值是如何改变的

时间:2018-04-01 07:11:46

标签: c operators

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

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

1 个答案:

答案 0 :(得分:0)

因为char只能容纳一个字节的数据,-128到127,所以在其中存储150的值会导致符号溢出,从而产生否定结果。

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

最大正值为127,一切正常。

当指定128时,符号位置位,报告的值翻转为-128。

对于每个值1,你超过这个值,值也会增加。

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

事实上,如果我尝试的话,这是我在Visual Studio上使用Visual Studio的结果。但同样,这是未定义的行为,因此无法保证当您溢出符号位时系统将执行的操作。