怎么判断一个有符号的8位二进制数表示的是什么?

本文详细解析了32位有符号二进制数表示的整数范围为-2^31到2^31-1的原因。通过对比正数和负数的不同表示方法,解释了最高位作为符号位的作用,以及如何通过补码计算负数的实际值。最后,介绍了C++中定义的最大和最小整数宏INT_MAX和INT_MIN。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在leetcode上刷第七题时,提到32位的有符号二进制数表示的整数范围为:-2^31~2^31-1,那这是怎么来的呢?

首先对于计算机内存存储的二进制数,具体表示什么其实是交给人来决定的,如:

1000 0001  
有符号数表示的是:-127
无符号数表示的是:129      

对于有符号数,最高位用来表示该整数的符号,0表示正数,1表示负数。

如果是正数,直接将它的原码翻译成十进制即可:

如:

0000 0010
表示的是正数:
解读方式:
直接以2为权展开为十进制数即可:
1*2^1=2

如果是负数,则它是用补码表示的,如:

1000 0000
表示的是负数:
解读方式:
第一步:直接将最高位以外的其他位按2为权展开:0
第二步:求出除去最高位以后的7位表示的模:2^7=128
第三步:将第二步的结果减去第一步的结果:128-0=128
第四步:给第三步的结果加上负号:-128

因此,对于8位的有符号二进制数表示的范围(-128~127),即(-2^7~2^7-1)可以这样计算:

最小值:  1000 0000    表示-128
最大值:  0111 1111    表示127

同理,对于32位的有符号二进制数表示的范围,可以计算为:(-2^31~2^31-1)

在c++中,为了避免记忆这两个数,用两个宏来替代了:

INT_MAX=2^31-1

INT_MIN=-2^31

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值