一个C语言溢出的问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 08:18:54
main()
{ unsigned short a=65536; int b;
printf(“%d\n”,b=a) ;
}
为什么运行后的结果是 0,我以为是65536;
但是我后来又问了别人,他说是溢出。
溢出不是要随便给出一个结果吗?为什么是0,有可能是负数吗?
谢谢你的帮助

首先65536的二进制数是 10000000000000000 17位
你的unsigned short只有2个字节16位。
所以机器只将65536的低16位赋给a即 a在机器中等于0000000000000000
所以a等于0啦 溢出应该相当于将一个大格式的数赋给小格式的数。
都是因为分配内存的固定的缘故,你只要记着机器赋值的时候,只给低位
高位的溢出就行了

有可能 从二进制角度来说
65536刚好最高位是1 其余位是0 1溢出后被舍弃 得到0

溢出不是随即 没有所谓的随便一个结果的说法

可以这样理解,也是正确的,假如说有1到10个数,当取11的时候就溢出了,结果是1,说白了,就像一个环似的

65536在内存是按照2进制格式储存的32的数,它应该是:00000000000000010000000000000000。而你在printf中使用%d使它只显示后16位的数,也就是0000000000000000。
你可以用65537,65538~~试试,就知道它的原理了

当然会溢出呀,你用的是short