编译器在定义变量时会有一个初值,在上面的代码中你没有给a赋初值,你用的编译器应该默认它是1100110011001100,换成十进制就是52428,后面输入语句如果溢出就不会改变a的值,在输出时继续使用初值52428,如果在定义无符号短整型a是赋予初值(unsigned short a=1)或者其他值,那么后面输入如果溢出输出的就将会是你给的初值了。
这个问题 的具体 结果 可能跟编译器有关。在C++中 对于 signed 和 unsigned 如果 输入的值大于 类型表示的范围值 ,编译器肯能的做法是 对范围值求模取余. 你可以看看 C++ primer 书中有介绍的
溢出了。
short型只有两个字节(8×2=16位)的内存,对于无符号数来说,就是0~2^16-1=0~65535。
超过了这个范围,高位自动截断并丢弃。
short int不是int吧,int的范围是正负65535,short修饰之后应该变短,和long int和int的区别一样吧
而且,52428应该是数据溢出了输出的错误值吧?