【python】-原码和补码

假设计算机是4位的: 在这里插入图片描述
存在的问题:
1、 正数计算 2+3=0010+0011=0101=5 OK
2、 负数计算 1±1=0001+1001=1010=-2 不OK

补码:时钟
变与不变:12点之后是几点?13点 对,1点也对。如何找到表盘上的1和逻辑上的13相统一的方法?假如你的表盘像蜗牛的壳一样是螺旋的,从俯视图来看,过了12点之后真的是13点(在1后面的一层),可是从主视图你发现13点和1点的位置是重合的。
假设:我们只关注指针在表盘的相对位置,而不关心其绝对位置
那么在这个假设下,我们可以发现,没必要用蜗牛,用平面图就可以了。

问题:如何从8点转到6点,反转2位,正转10位(因为我们实际上真的是蜗牛)
有意思的发现:减法可以用加法来计算。
问题:如何用加法来计算减法?(如何将蜗牛的结果映射到平面?)
方法:看主视图
求补码,位数截断
3-6=0011+1010=1101=-3
3-3=0011+1101=(1)0000,但是1被截断了,因为我们看的是主视图。
在这里插入图片描述
为什么负数的补码要为1?
以4位二进制为例,容量为16,减去2相当于加上14 1100,干脆就把1100叫做-2的补码。所以补码就是容量减去本身。

举例:
3减4等于3加上-4的补码:0011+1100=1111在补码表中对应十进制-1。
如何理解a的补码加b的补码等于a+b的补码?
现在始终指向0点(12点)问向左拨2格再向左拨3格是几点?
不知道是几点,但肯定和向左拨5格是一样的,
0+(-2)补+(-3)补=0+(-5)补,去掉0即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值