首先65536的二进制数是 10000000000000000 17位
你的unsigned short只有2个字节16位。
所以机器只将65536的低16位赋给a即 a在机器中等于0000000000000000
所以a等于0啦 溢出应该相当于将一个大格式的数赋给小格式的数。
都是因为分配内存的固定的缘故,你只要记着机器赋值的时候,只给低位
高位的溢出就行了
溢出不是随便给个结果的.65536
转换成二进制是1...(16个0)
你将它赋值给a,a只有16位的长度,所以把高位的1截断,只剩下16个0,也就是0了.
有可能 从二进制角度来说
65536刚好最高位是1 其余位是0 1溢出后被舍弃 得到0
溢出不是随即 没有所谓的随便一个结果的说法
65536在内存是按照2进制格式储存的32的数,它应该是:00000000000000010000000000000000。而你在printf中使用%d使它只显示后16位的数,也就是0000000000000000。
你可以用65537,65538~~试试,就知道它的原理了
可以这样理解,也是正确的,假如说有1到10个数,当取11的时候就溢出了,结果是1,说白了,就像一个环似的