数据类型范围,有符号类型无符号类型,正负, 反码补码的终极理解,一看就懂

本文通过简单易懂的例子解释了如何使用补码表示有符号数,并介绍了如何判断一个数是否为负数的方法。

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

经常看到很多初学者被有符号类型无符号类型,还有什么首位是符号位blablabla弄的云里雾里,下面用特别简单的例子给大家讲一下,瞬间就懂。

首先3位2进制数能代表多少,很简单
000~111 0~7 一共8个数
这是最简单的读法,但是咱们又想用同样的东西表示正负可咋整;
简单 对半劈
8分开一办吧 一半正一半负 大家公平OK?

  1. 0~3 4个数还是原来那样表示正数
  2. 4~7 4个数表示负数

怎么对应呢 大家发现没
1+7=8 2+6=8 3+5=8哎 刚好是2的三次方那就分别用7,6,5表示对应的-1,-2,-3吧;
怎么实现呢 1(001)的反码是6(110)相加才等于7 那么再加个1就得到补码7(111) 刚好相加是8 其他的类似 有意思的是中间数4(100)对应的补码还是自己100 所以也可以叫4,也可以叫-4,咱不说要公平吗 让他代表-4最合理,所以
使用补码就得到了

  • 1-7(-1)
  • 2-6(-2)
  • 3-5(-3)
  • 4-4(-4)

的一一对应,所以同样的000~111这次我们可以用这种办法表示负数了
发现没有0,1~3有对应的-1~-3那么尴尬的中间数4就表示-4吧而-1~-4都是1开始的 所以可以看成最高位是1就是负数(符号位)这可不是为了变成负数而设置的符号位 而是这种规则导致表示负数时最高位就是符号位。是不是很明白呢 觉得明白就赞一下吧。

  • 对应的n位 一共2^n个数;
  • 0~2^(n-1)-1表示正数
  • 2^(n-1)~2^n-1表示负数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值