【数制与编码】模运算 负数的补码为什么要按位取反再加一

模运算和负数的补码为什么要按位取反再加一

模运算

模运算概念:在一个模运算系统中,一个数与它除以“模”后的余数等价

作用:实现+ 和– 的统一,实现数值运算时使用同一的符号

例如:模12系统时钟
  假定钟表时针指向10点,要将它拨向6点, 则有两种拨法:
    ① 倒拨4格:10- 4 = 6
    ② 顺拨8格:10+8 = 18

  即模运算:8是- 4对模12的补码,- 4的模12补码等于8
    10- 4 ≡ 10+8 (mod 12)
    - 4 ≡ 8 (mod 12)

概念解析(非常重要)

  1. 模运算实际上就相当与一个一元一次函数,如:1+x=0,求x=?,答:x=0-1 即-1,这个一元一次函数中0就是模,就相当于- 4 ≡ 8 (mod 12)中的12,1和-1就相当于- 4 ≡ 8 (mod 12)中-4和8

  2. 至于为什么,因为“溢出”,就像钟表只有12个点,就相当与一个12进制数,而存储这个数的空间只有一位,当超过12点后,时间就放生了“溢出”,可显示的数值就变成了0,那么指向10点的钟表,要将它拨向6点,如果这么看10-x=0,求x,答:x=-4或+8,-4可以理解往后面拨四个小时就行了,+8呢,10点往前拨8个小时,10+8=18,但是模12系统中最大的数位为12,18超过了12发生了溢出,自然就变成6了

  3. 换算到计算机系统中的二进制数据,1+x=0,求x=?由于需要表示符号位就变成了,00000001+x=00000000,里面的x就应该代替 -1的二进制编码才对,这样,我们得到 x=11111111,而11111111就是-1,所以称11111111为-1的补码

  4. 我们常理解为补码就是负数“按位取反,末尾加一”,我们知道模就是R位模系统中的基数,如:1-1=0,如-1=0-(+1),即二进制的1000000001=0000000000-0000000001,即1000000001=(1111111111-0000000001)+0000000001,正是负数的按位取反,末尾加一

结论

  一个负数的补码等于模减该负数的绝对值
    1000000001(-1)=0000000000-0000000001(1)

  对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

列队猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值