为什么int类型(16位)的下溢下限为-32768而上溢上限却是32767

首先说吧,32767很容易理解,32767=2^15-1 (因为要有一个符号位),但为什么下溢的时候分明是15位来表示的数会出现32768呢??

 

首先从原码讲起,原码即为计算机中对数值的二进制表示,如 5用二进制表示为0000 0101 ;

 

其次就是反码,反码,顾名思义取反,对于正数来说,反码与原码相同;对于负数来说,反码为原码的各位取反(符号位除外),如(0011 0111)反= 0011 0111  (1101 0010)反= 1010 1101 ;

 

再次就是补码,计算机中,数值疑虑用补码表示和存储的,正数的补码与原码相同,负数的补码为其反码+1,如(0101 1101)补=0101 1101  (1101 0010)补=1010 1110

 

由于计算中的CPU只有加法器,没有减法器,所以在计算机采用原码做减法是会存在这样的问题:对于1-1=0

看做1+(-1)=0 二进制表示 0001+1001=1001 变成了十进制的负1而不是0。补码的出现很好的解决了这个问题,由于采用补码运算,则补码加法成为:[X+Y]补 = [X]补 + [Y]补同时,补码的减法变为:[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补  补码的乘法变为:【X*Y】补=【X】补×【Y】补;在此我们以减法为例说明补码的优势,还以上述为题为例:(0001)补+(1001)补 = 0001 + 1111 = 0000 (最高位的进位省略),这样就顺利得到了0

 

另外,补码还解决了原码中存在两个0 的问题(即+0 和 -0),以8进制为例,int_8的取值范围应该是-127~ -0和+0~ 127 即存在正0  0000 0000 和 负 0 1000 0000 ,但是在两个0转换为补码后全部都变成了0000 0000,细心的你会说原来8位编码表示的256的二进制数在补码中不就少了一个吗?

对,当然是少了一个,对于1000 0000 ,任何原码都不能转换成补码后成为1000 0000的形式

但数是死的,人是活的,不能让XX憋死不是? 所以人为规定补码中 1000 0000 表示 -128 ,这就很好的解释了,为什么8位的整形变量的下溢下界会是-128而上溢上届是127了。

 

同样,对于16进制int,也是这样, 表示范围成了 - 32768 ~ 32767  (32768=2^16)

### 回答1: 在浮点数中,阶码表示指数部分,用来表示浮点数的数量级。阶码上溢和阶码下溢是指阶码的值达到了最大值或最小值,导致无法继续表示更大或更小的数值的情况。 阶码上溢指的是阶码的值达到了最大值,无法再表示更大的数值。例如,在单精度浮点数中,阶码的范围为-127到+128,如果阶码的值达到了+128,就会发生阶码上溢,此时浮点数的值会变为无穷大或正无穷大,无法再表示更大的数值。 阶码下溢指的是阶码的值达到了最小值,无法再表示更小的数值。例如,在单精度浮点数中,阶码的范围为-127到+128,如果阶码的值达到了-127,就会发生阶码下溢,此时浮点数的值会变为零或负零,无法再表示更小的数值。 阶码上溢和阶码下溢都会导致浮点数的精度丢失,因为在这些情况下,浮点数只能表示出一个非常大或非常小的数值,无法表示出更精确的数值。因此,在进行浮点数计算时,需要注意阶码上溢和阶码下溢的情况,并进行适当的处理。 ### 回答2: 阶码上溢和阶码下溢是浮点数运算中出现的两种错误情况。 阶码上溢指的是浮点数的指数超出了系统所能表示的范围。在浮点数的表示中,指数部分用阶码来表示,阶码通常是一个有限长度的二进制数。当计算结果的指数超出了阶码能够表示的范围时,就发生了阶码上溢。阶码上溢会导致结果的表示不准确或者无法正常表示。 阶码下溢则指的是浮点数的指数过小,接近于0,小到系统无法表示的程度。在浮点数的表示中,阶码代表着数值的量级,当阶码超出了系统能够表示的最小范围时,就发生了阶码下溢。阶码下溢会导致表示的数值丢失精度或者变为0。 阶码上溢和阶码下溢都是浮点运算中的异常情况,通常由于数值过大或者过小导致。处理这些异常情况的方法通常是根据具体情况采取相应的措施,比如对超出范围的数值进行舍入或者采用特殊的数值表示方法。 ### 回答3: 阶码上溢和阶码下溢是指在计算机中用于表示浮点数的阶码出现了溢出下溢的情况。 阶码是浮点数中表示指数幂的部分,用于调整小数点的置。在计算机中,阶码通常用一定长度的二进制数表示。阶码上溢和阶码下溢是指阶码的值超出了所能表示的范围。 阶码上溢是指阶码的值过大,超过了所能表示的最大值。这通常发生在进行超出浮点数表示范围的运算或者运算结果过大导致阶码过大时。阶码上溢会导致浮点数的表示失真,无法准确表示实际的数值。 阶码下溢是指阶码的值过小,超出了所能表示的最小值。这通常发生在进行非常小的运算或者运算结果非常接近0的情况下。阶码下溢会导致浮点数的精度丢失,无法准确表示非常接近0的数值。 阶码上溢和阶码下溢是浮点数运算中常见的问题,需要注意处理和处理的方式。在程序设计中,需要对可能出现阶码上溢下溢的情况进行判断和处理,以避免结果的失真和精度的丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值