在聊到补码之前,先说一个小学数学题:
此刻是5点钟,你却发现自己的手表停在10点钟上。有什么方法将手表调回到正确时间呢?
如图
![a749118f2998addb480dba0c3fa38792.png](https://i-blog.csdnimg.cn/blog_migrate/c9daf6bf32c0572f381dec789460c8ed.png)
图中给出了两种方法:
方法一(红色方框):逆时针转动5格
方法二(蓝色方框):顺时针转动7格
公式也各处来了。我们来分析一下 两个数字 -5 和 7.
12+(-5) =7
图中12点钟的旁边“(0)”的提示。也就是到了12就变为0.
可以总结如下:
一个周期是12
一个数的补码 = 12 - 该数
同样的道理
一个八位二进制数(复数):1000 1000 (类比于上面的-5)
它的补码如何计算呢?
他的周期为:1 0000 0000 。
那么二进制同样的 可以写为 1 0000 0000(0)(还记得上图12点位置有个(0)吗)
1 0000 0000 =
所以补码就可以写成:
![5828e6e2aa95abca04ea84847383c0e0.png](https://i-blog.csdnimg.cn/blog_migrate/57e00c7ae73e99c14bf8effc03ae5a35.jpeg)
切记切记:对于负数的补码,符号位保持不变。
我们手动自算一下上面的题目吧:
回想钟表题目 12+(-5)= 12 - |-5|
所以可以写为
1 0000 0000 - 0000 1000 = 1111 1000
或者
以上补码的由来
后来
。。。。。
流行的口诀则是:符号位不变,其余各位取反 加1(只针对于负数)
再后来
。。。
符号位不变,其余各位取反 又被称为 反码
常用的编码(ASCII):
我可以假设 0000 0001 为汉字“我”
0000 0010 为汉字“爱”
0000 0100 为汉字 “你”。(类比于数学二元一次方程 设什么什么为 x).
结果 狗ri的 情敌把他翻译为
0000 0001 为汉字“讨”
0000 0010 为汉字“厌”
0000 0100 为汉字“你”。
所以 。。。。你应该知道了。没错,凉了。
为了不引起误会呢。美国的组织设了一个标准。标准规定7位不同二进制的排列
代表具体不同的符号。避免一段感情的再次破灭吧。这个标准就叫做ASCII码。
![38bfb09bd7c22656062c45452222d237.png](https://i-blog.csdnimg.cn/blog_migrate/59ace2012a0de62f24b4bb52ee895ad6.jpeg)