/*how will the value of i be changed in output*/
void main()
{
int i = 150;
char c = i;
i = c;
printf("%d", i);
}
答案 0 :(得分:0)
因为char
只能容纳一个字节的数据,-128到127,所以在其中存储150的值会导致符号溢出,从而产生否定结果。
符号溢出导致未定义的行为,但经常发生的是:
最大正值为127,一切正常。
当指定128时,符号位置位,报告的值翻转为-128。
对于每个值1,你超过这个值,值也会增加。
所以,在你的情况下分配150,在128位翻转,你仍然有22左(150 - 128),所以最终值可能是-106(-128 + 22)。
事实上,如果我尝试的话,这是我在Visual Studio上使用Visual Studio的结果。但同样,这是未定义的行为,因此无法保证当您溢出符号位时系统将执行的操作。