关于C++的一个疑问.unsigned short int a的范围是0-65535,但是给a赋值大于65535时,都输出52428

请教各位高手,那个52428是怎么算出来的
2025-03-20 20:44:57
推荐回答(4个)
回答1:

编译器在定义变量时会有一个初值,在上面的代码中你没有给a赋初值,你用的编译器应该默认它是1100110011001100,换成十进制就是52428,后面输入语句如果溢出就不会改变a的值,在输出时继续使用初值52428,如果在定义无符号短整型a是赋予初值(unsigned short a=1)或者其他值,那么后面输入如果溢出输出的就将会是你给的初值了。

回答2:

这个问题 的具体 结果 可能跟编译器有关。在C++中 对于 signed 和 unsigned 如果 输入的值大于 类型表示的范围值 ,编译器肯能的做法是 对范围值求模取余. 你可以看看 C++ primer 书中有介绍的

回答3:

溢出了。
short型只有两个字节(8×2=16位)的内存,对于无符号数来说,就是0~2^16-1=0~65535。
超过了这个范围,高位自动截断并丢弃。

回答4:

short int不是int吧,int的范围是正负65535,short修饰之后应该变短,和long int和int的区别一样吧

而且,52428应该是数据溢出了输出的错误值吧?