一、引例
先来个自我介绍吧,本人现在大二学生一枚,怀着激动的心情决定开始记录下自己每天的进步,今天也算起了个大早学习来预习功课,今天学习到的就是数的机器码。让我们先通过一个简单的问题来引出我们的”几大主人公”。
问题描述:
现在有十个袋子,每个里面有十个金币,有一袋假金币,真金币重10g,假金币重9g,现在给你一杆秤,最少称几次可以找出假金币?
问题解答: 答案为一次。我们只需要将这10个袋子从0开始依次编码到9,随后依次取出对应编码数量的金币,如果重为45g,则编号为0的袋子是假的,否则,与45g差多少就是几号袋子为假的。
看到这里,你有没有感到编码的神奇之处。好啦,我们go on!
二、原码
让我们先来看个表格
原码(二进制表示即可) | 真值(十进制) |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | -0 |
1001 | -1 |
1010 | -2 |
1011 | -3 |
1100 | -4 |
1101 | -5 |
1110 | -6 |
1111 | -7 |
通过这张表,我们不难看出,用原码的表示方法:第一位为符号位,对于四位二进制的取值范围就是[-7,+7]。
但是,我们用原码进行计算时就会出现问题
所以我们则引入了补码。
三、补码
今天小森发呆之时,看着钟表滴答滴答,发现好像时间不对劲,现在是3点,而钟表显示8点,那么我要么顺时针拨动5周,要么逆时针拨动7周,这实际上就用到了我们的补码,对于钟表,我们可以认为模为12即mod 12。
那么我们就可以通过该公式:当x<0时,[x]补码=mod+x,我们来通过一个计算(-001)的补码来深层次的理解下这个公式
这也就是我们经常挂在嘴边的取反加一。
同样如果想求真值x也可以逆用该公式,或者用:
注:Xn这里指的为符号位。
另一种方法: 从补码构成角度求负数补码真值
补码构成: 符号位+补数
方法:将符号位后的补数拿走全部替换为0-补数
四、移码
其实呢,x的移码=移动的数值+x,也就是呢,移动多少加多少。或者将补码的符号位取反即可。
最后在附上一篇博客园的文章供大家深入再学习
>数的机器码<
文章不足之处欢迎大家评论~