主要问题是出在输出控制上,因为你定义的是无符号整数因此16位都用来表示数值,没有符号位,但是你输出处用%d是不对的,%d是用来输出有符号整型数的。因此会将b的值以有符号的形式输出。而65536这个值在16位有符号整数表示中正好是-1.
现在基本都是用32位表示整型数了,因此这样写,不会在32位编译系统中发错误。
unsigned int b=65535 换成二进制 是16个1,在带符号位的表示中16个1代表-1.
以为16个1+1=0 (111111111111111+1 每个都进位 ,最后溢出,变成一串0)
你可能是用的老版本的c编译程序吧 (turbo2.0吧)
现在的新版本例如 visual6.0 已经把这个问题解决了
不同的编译系统分配的字节有差别
szy1_119 的回答是正确的。
楼上说的很清楚