short int 是16位的,有符号的范围是-32768~32767。这个时候可能就有人发问了,32768用二进制表示为1000 0000 0000 0000,那么这个负的32768的负号又怎么理解呢?看下面。
还是以32767为例子,它的二进制为:0111 1111 1111 1111。对于有符号整型32767来说,它的二进制最高位称为符号位(而不是数据位了),符号位顾名思义就是决定正负号的,规则:0是正,1为负。
(4) 为了进行理解(3)中的含义,做一个程序说明:
#include <stdio.h> main() { // 定义有符号类型 short int a=32767, b, c, d; b=a+1; c=a+2; d=a+3; printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d); }(5)了解了什么是补码后再来看上述程序:32767的二进制为:0111 1111 1111 1111。我们来计算一下c的值为什么会等于-32767。c=32767+2,c的二进制为:1000 0000 0000 0001(32767的二进制加2),c的这个二进制是在计算机中存储的补码,需要将它转换为原码,也就是将c的二进制数减一再取反。得到的二进制原码为:1111 1111 1111 1111。我们已经说过,符号位为1,表示负值,并不参加运算,所以此二进制的十进制为:-32767。
(6)通过程序也可以发现一个规律,short int的取值范围是-32768~32767,把头尾连接起来形成一个环就可以了。