short int值高于32767

Kei*_*out 2 c short

当试图在C中存储高于32,767的短整数值时,为了看看会发生什么,我注意到打印到屏幕上的结果是我想要存储的数字, - 65,536.例如,如果我尝试将65,536存储在一个短变量中,则打印到屏幕上的数字为0.如果我尝试存储32,768,我会将-32,768打印到屏幕上.如果我尝试存储65,546并将其打印到屏幕上,我会得到10.我认为你得到了图片.为什么我看到这些结果?

J D*_*ith 8

使用Twos Complement存储整数值.在二进制补码,可能的值的范围是-2^n2^n-1,其中n是用于存储位的数目.由于存储方式的完成,当你走到上面时2^n-1,你最终会回到原点2^n.

短裤使用16位(15位用于数字存储,最后一位是符号).

编辑:请记住,不保证会发生此行为.编程语言可能完全不同.从技术上讲,高于或低于最大/最小值是未定义的行为,应该这样对待.(感谢Eric Postpischil让我保持警惕)

  • 行为未定义.你不能依赖于两个人的补充.即使底层硬件使用二进制补码,编译器中的优化也会导致包含溢出的代码以令人惊讶的方式被省略或更改. (2认同)