原码、反码和补码快捷理解的笔记

一、一个按别人框架搭、自己又整理了一遍的例子,对照下列解释看:

A00000001001000110100010101100111100010011010101111001101111011110000
A101234567891011121314150
原码A2012345670-1-2-3-4-5-6-70
B000000010010110100010101100111100010011010101111001101111011110000
反码B101234567-7-6-5-4-3-2-1-00
补码B201234567-8-7-6-5-4-3-2-10

二、解释

〇【总述】反码与补码产生的原因:是为了使cpu对 减法/负数 的运算更有效率:不用去识别符号位,加只管加,而用不同 的二进制数表示十进制的正负数

如:1011+1=1100

对应十进制

-3+1=-4

显然不对

①原码的产生:从数字表示上来看,将一部分的二进制数码分于负数。由此,首先,以第一位作为符号位,其余位不变,是为原码A2。但是显然不满足“只管加”的效率原则。例子见右。
②反码的产生:为了解决这个问题,参考了   模数运算/周期性的加法运算 所用的方法。即 n-m=n+(modulus-m),利用+模数会溢出的效果。即,对原码除符号位以外取反(互补数之和为模数,模数modulus在上面这个例子里就是23-1),得到B1,是为反码。
③补码的产生:但是发现1111+1=0000->-0+1=0显然错误,故再将所有的反码对应+1,得到补码B2。

三、简单粗暴地记忆就是:

1.原码
+3的原码:0011
-3的原码:1011
2.反码
反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。
+3的反码:0011
-3的反码:1100
3.补码
补码也非常的简单,就是在反码的基础上按照正常的加法运算加1。
+3的补码:0011
-3的补码:1101

参考链接:https://www.jianshu.com/p/ad19dabb3ae0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值