您的位置:首页 > 编程语言 > C语言/C++

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,仍然是不清楚,以后如果有机会弄清楚,需要在此文补充上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息