C语言中16位整型数据的取值范围
2018-01-21 16:12
381 查看
本文介绍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,仍然是不清楚,以后如果有机会弄清楚,需要在此文补充上。
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,仍然是不清楚,以后如果有机会弄清楚,需要在此文补充上。
相关文章推荐
- 为什么C语言中的整型取值范围是--32768~32767
- C语言各种数据类型取值范围
- C语言各种数据类型及其在系统中占的字节和取值范围
- C语言各种数据类型取值范围
- C语言中各种数据类型中所占的字节和取值范围
- C语言各种数据类型取值范围
- C语言各种数据类型的取值范围
- C语言各种数据类型取值范围
- Javaz整型数据类型、浮点型数据类型,取值范围
- C语言数据类型取值范围解析
- C语言各种数据类型取值范围
- C语言各种数据类型在系统中占的字节和取值范围
- C语言中short整型数据的范围-32768----32767是中的-32768是如何确定的
- C语言中,各类型数据所占字节数及与它取值范围的关系
- C语言数据类型取值范围
- C语言各种数据类型在系统中占的字节和取值范围
- C语言各种数据类型取值范围
- C语言的整型溢出问题 int、long、long long取值范围 最大最小值
- C语言各种数据类型在系统中占的字节和取值范围
- 搞透C语言整型数据范围表示