补码,数据溢出变负的原因

视频地址

『教程』补码怎么来的?

1.首先需要知道负数的二进制怎么来的

将减去一个数变为加上这个数的负数
通过结果反推这个负数的二进制是多少
多组数据对比,得出:

  • 先把十进制的负数取绝对值,
  • 转为二进制 然后按位取反,
  • 最后加 1 。

这就是十进制负数的二进制写法了,这就叫做补码。
对于正数和0,源码和补码是一样的在这里插入图片描述

2. 为什么数据溢出会变成负数?

计算机中一个8位最多存储256个数字
不足的前面位数由0补全

  • 这个8位由两部分组成,第一个数是最高位(0为正,1为负)和其余部分组成(实际数据)
00001011=11
最高位补码补码补码8421=8+0+2+1=11

下面是8位数最高值127:
在这里插入图片描述

  • 最高值127+1,就会让最高位的正负数标记进一位变为1,也就成了负,变为1000 0000 1000 0000
  • 既然是负数,那就通过补码的由来进行反推就能得出他的的十进制的数字
  • 先减1,得到 0111 1111
  • 按位取反,得到 1000 0000
  • 他的十进制的绝对值就是 128 取负数,得到 -128

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值