以钟表为例,从11点转到6点,可以逆时针转5格,也可以顺时针转7格。
则有 11-5=6,(11+7)mod(12)=18mod(12)=6;
钟表中数字从0点到11点,最大的数为11,0到11共有12个数,12为这个代数系统的模。
7=12-5,12=11+1;
(11+(11+1-5))mod(12)=6
(11+(12-5))mod(12)=6
(被减数+(模-减数))mod(模)
类比推理,二进制系统中,如何将减法转化为加法呢?
举例,有符号数,一共有4位,第一位为符号位,后三位为数值位,如1010代表-2
,那么有多少个数呢?,
显然每一位有两种可能,一共有2的4次方,即16个数【模】,
其中我们把1000规定为-8,最大的正数为0111(2进制)=+7(10进制)。
模为10000(注意位数为5位)。
怎么用补码进行运算呢?(这里以7-1为例,,0111=7 1001=-1)
这里我们先给出补码的定义,反码加1.
那么反码怎么算呢?
正数的反码,补码都是它本身。
负数要复杂一点:
-1(1001)的反码1110,符号位不变,其他位取反。
-1 的补码为:反码加1,即1110+0001=1111。
7的补码为0111,-2的补码为1111。
0111+1111=10110。舍弃最高位即10110-10000=0110
0110也是补码,为+6的补码。
我们来分析原因:
(0111+(10000-0001))mod(10000)=
(0111+1111)mod(10000)=10110mod10000=0110
由此我们得出反码,补码的真实意义:
先以钟表为例:最大数为11,12为模,模=最大数+1
5的反码为11-5=6;
5的补码为反码+1=6+1=7;
-1(1001)的反码为1110。
先忽略烦人的符号位。
0111-001=0110。
哦,原来负数反码是这样。
-1(1001)和-6(1110)
|-1|+|-6|=7(0111),7为最大数
再看补码
-1的补码为
反码+1
1110(反码)+1=1111(补码)
模 - | -1|
10000(模)- 0001=1111(补码)
值得注意的是,反码和补码都是没有正负的。
仅仅二进制中为把减法转化为加法过程中产生的一种抽象码
人为定义的。
反码、补码的本质意义
于 2021-12-14 21:25:57 首次发布
博客讨论了如何在二进制系统中将减法转换为加法,通过钟表的模运算类比,引入了补码的概念。解释了补码的定义,即负数的补码是其反码加1,用于在二进制中实现加减运算。以7-1为例,展示了如何利用补码进行计算,并通过模运算验证了结果的正确性。
摘要由CSDN通过智能技术生成