char 其数值表示 范围的计算

char 其数值表示 范围的计算
我理解的是8位情况下,min=1111_1111=-(2^7-1);max=0111_1111=2^7-1
书上范围是-2^7~2^7-1.是怎么计算出来的?
东方奋强 1年前 已收到1个回答 举报

狼有在线 春芽

共回答了21个问题采纳率:95.2% 举报

char为字符型数据(数据长度为8位二进制数),也可参与整数运算,
计算机的有符号数(整型数)是以补码形式表示的.
对于8位二进制数表示的补码,最高位符号位,其余数值位,如
(+8)的补码=0000 1000
(-8)的补码=1111 1000 //方法是:+8的原码求反加1
所以,最大正数表示为:0111 1111,即2^7-1
最小负数表示为:1000 0000,即-2^7

1年前 追问

9

东方奋强 举报

你的意思是说-2^7的补码是1000_0000吗?计算-2^7的补码时已经产生了溢出,所以应该不能表示-2^7吧?

举报 狼有在线

你写错了,是1000 0000 八位二进制,-2^7 不可能产生溢出,计算机之所以采用补码编码,就是要充分利用所有编码资源,原因如下(都使用用8位二进制数): 原码表示,对于8位二进制数,只能使用255个编码,即 (-)1111 1111 ~ (+)0111 1111,其中数字0有两个编码:(-)1000 0000 和(+)0000 0000,用于计算时不方便,复杂,所以采用补码: 负数的补码表示范围:(-)1000 0000 ~ (-)1111 1111,注意: 1000 0000 这是绝对值最大数,即-128,这是绝对值最小的数,1111 1111,即-1; 正数的补码表示范围:(+)0000 0000 ~ (+) 0111 1111, 同样,它们分别0 ~ +127 正负数加起来,共256个编码 若不能理解,还请仔细查看补码的编码方式和编码原理,这里我就不罗嗦了。
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.935 s. - webmaster@yulucn.com