以short类型举例:
在c++中,short类型占两个字节的空间,每个字节为8位,即short类型占16位。
正负数表示
我们通常都会说,一个16位的数字所能表示的值为0~2^16-1。但是我们不只是会用到正数,负数在我们日常生活中也是必不可少的,那么计算机就想我该怎么表示负数呢?
按照正数与负数是成对出现的原理,那我们怎么把一半的正数变成我们想要的负数呢,计算机说那我把从二进制最高位为1的这些数表示为负数吧,1000 0000 0000 0000本来是32768,现在我把他当做-32768,1000 0000 0000 0001本来是32769,现在我把他当作-32767,这样也符合我们对负数的理解,-32767要比-32768大1。依次到2^ 16 -1 即1111 1111 1111 1111,正好他就表示-1了,那再连上0与正数部分,所以我们就得到了用二进制表示的一个实数范围,-2^ 15~2^15-1。细心的小朋友会发现,负数的绝对值与其对应的表示所代表的正数相加恰好等于这个二进制能代表的数字的数目的多少,即65536。
内存溢出
刚才我们说完了一个16位的二进制数所能表示的数字范围为-2^ 15~ 2^15-1,即-32768~ 32767,那么如果我们定义一个short num=32768,你猜打印出来的num值是几呢?答案正是-32768,是不是知道内存溢出计算机是怎么处理的了,对,循环处理。那我如果short num=32767+65535;打印一下看答案是不是32766吧!