解释输出——我不明白 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 上得到的结果。但同样,这是未定义的行为,因此不能保证当符号位溢出时系统会做什么。
/*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 上得到的结果。但同样,这是未定义的行为,因此不能保证当符号位溢出时系统会做什么。