二进制补码以及为什么要使用补码

  1. 计算机系统的内部以二进制形式存储数据。
  2. 在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制。

补码规则

  1. 在计算机系统中,数值一律用二进制的补码来存储。
  2. 二进制的最高位是符号位,0表示正数,1表示负数。
  3. 正数的值是其本身,负数的值是最高位(符号位)不变,其它位逐位取反,再加1。
  4. 两数相加,若最高位(符号位)有进位,则进位被舍弃。
    例如: 4位二进制补码中,5-3的结果是2

(1101)2 //2是二进制的意思
0010 //逐位取反
0011 // 加1
(1101)2 = -3

补码运算的特征

  1. 计算机中正数和负数的关系是取反加一。
    【示例】在四位二进制数中,已知3的二进制值是0011,若要求-3,则
    0011 3
    1100 逐位取反
    1101 +1
  2. 补码运算是封闭的: 运算结果保留在补码范围之内, 超范围就溢出。
    【示例】四位二进制的补码运算中,请计算5+4的结果。
    结果为:-7
  3. 4位二进制补码最多能表示24=16个数,数的范围是-8~7
  4. 8位二进制补码最多能表示28=256个数,数的范围是
    -128~127

补码运算的原理

“正数+负数=模”。
模:某种类型数据的总数,例如:
4位二进制数的模是24=16
8位二进制数的模是28=256

为什么要使用补码?

下面的故事都是我瞎编的~~
计算机专业的人你懂得,大家都不想重复造车轮。搞出来加法电路以后,就在大家一筹莫展想怎么搞个减法的电路的时候,我的女儿(好吧,我没有)拿着一道数学题找到了我,5+(-2)=?,我惊奇的发现,减法和加法之间似乎有着某种py交易。
所以我们是不是可以用加法电路就可以完成减法的运算呢?
每当老师上课的时候提出这种设问,答案往往是肯定的(23333)
咱们首先画个大饼,就是公司画给咱们的那种。
在这里插入图片描述
比如5-3=2。我们发现,5往后面退后3个格子就可以得到2这个结果,但是没有注意到的是,5往前面走7个格子也可以得到2这个结果,但是这个7和3有什么必然的联系吗?在这个饼里面他的模是10!3+7=模!
所以5-3=2在计算机的算法就应该是下面的过程:
(-3)2=011
(-3)=001
在这里插入图片描述
这里我们舍掉最高位就是结果2。实际上,因为这里是3位二进制数,110对应的10进制数为6,6+2=8,所以其实如果写成4个二进制数,就是
0101+1101=0010 ,8位二进制的话,就是00000101+11111101=10000010结果仍然是2

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值