C语言中16位整型数据的取值范围

版权声明:本文为博主原创文章,商业转载请联系作者获得授权,非商业转载请注明出处。 https://blog.csdn.net/liitdar/article/details/79120295

本文介绍C语言中16位整型数据的取值范围。

1. 无符号16位整型数据

对于无符号(unsigned)型数据,存储单元中全部二进位(bit)都用作存放数本身,而不包括符号。所以对于16位整型,取值范围如下:

0000 0000 0000 0000 到 1111 1111 1111 1111

对应的十进制数为0到65535(即216-1)。

所以,无符号16位整型数据的取值范围是0到65535。

说明:无符号整型变量只能存放不带符号的整数,如123、4567等,而不能存放负数。

2. 有符号16位整型数据

对于有符号(signed)整型,存储单元中最高位代表符号位:0为正,1为负。

a)当最高位为0,即代表正数时,取值范围如下:

0000 0000 0000 0001 到 0111 1111 1111 1111

对应的十进制数为1到32767(即215-1)。

b)当最高位为1,即代表负数时,取值范围如下(以补码形式表示):

1000 0000 0000 0000 到 1111 1111 1111 1111

对应的十进制数为-32768(即-215)到-1。

所以,有符号16位整型数据的取值范围是-32768到32767。

———————————————— 分割线 —————————————————

备注:为了更好地理解符号位为1,即数值为负时的取值范围,在此处对-1和-32768的原码和补码进行计算并解释。

1. 计算-1的补码

a)1的原码:0000 0000 0000 0001;

b)取反:1111 1111 1111 1110;

c)加1:1111 1111 1111 1111。

所以,-1的补码为1111 1111 1111 1111。

2. 计算-1的原码

a)除符号位,其余位取反:1000 0000 0000 0000

b)加1:1000 0000 0000 0001

所以,-1的原码为1000 0000 0000 0001。

3. 计算-32768的补码:

a)32768的原码:(00) 1000 0000 0000 0000

b)取反:(11) 0111 1111 1111 1111

c)加1:(11) 1000 0000 0000 0000

所以,-32768的补码为(11) 1000 0000 0000 0000

说明:

1. 括号中的00、11,表示更高位置的符号位,在某些情况下,使用(显示)更高位置的符号位可以清晰地表达计算过程;

2. 在上述的补码结果中可以看出,如果不使用更高位置的符号位“(11)”的情况下,即-32768的补码为1000 0000 0000 0000时,最高位的1既代表了符号位,同时也代表了数值位;而如果使用更为位置的符号位“(11)”的情况下,即-32768的补码为(11) 1000 0000 0000 0000,时,最高位1仅代表数值位,“(11)”代表负数。

4. 计算-32768的原码,为了更好地解释此计算过程,此处使用更高的符号位,如下:

a)除符号位,其余取反:(11) 0111 1111 1111 1111

b)加1:(11) 1000 0000 0000 0000

所以,-32768的原码为(11) 1000 0000 0000 0000。

说明:从本文看来,-32768数字情况比较特殊,虽然是一个负数,但是其原码与补码是一样的。

————————————————————————————————————————————————

备注:对于有符号位的16位整型,为何会包含-32768,仍然是不清楚,以后如果有机会弄清楚,需要在此文补充上。

阅读更多

没有更多推荐了,返回首页