前言
emmm,最近是在学习计算机组成原理,由于事先是知道这门课是十分重要的,所以在开始上课的时候是比较认真的。可是在刚刚学到原码反码补码的时候,真的是被“学院派”们的教科书整的脑壳痛,各种高大上的介绍以及原理公式轮番攻击着我,哎,没办法,所以就整理了网上的教程,自己来写一篇比较容易理解的博客了。
讲解
1.整数的转换
首先我们需要知道一点,就是原码反码补码都是带符号的二进制数据在计算机中的表示形态,也就是说我们所有的操作对象都是面对二进制数的。其次,就是当我们将其他进制的整数转换的二进制数之后必须要有8位,如果不足8为则需要在前面补0,需要注意的是最左边的那一位数就是符号位,即0表示正数,1表示负数。举例来说:
十进制数:43
转换为二进制数:101011
补全为8位:00101011 (由于是正数,所以符号位(第一个数)为0
在将一个整数转换为二进制数之后,我们就可以来进行具体的操作了。在这里我们要将整数分为正数和负数。
正整数
正整数的转换比较的简单,所有的正整数的原码反码补码都是一样的。举例来说:
十进制数:43
补全为8位二进制:00101011
原码:00101011
反码:00101011
反码:00101011
负整数
负整数的转换则是原码反码补码之间的关系转换。首先我们需要现将该负整数的原码得出。负整数的原码就是先得到它本身绝对值的原码,之后再改变符号位即可,举例来说:
负整数:-43
绝对值43的原码:00101011 由于是负数,因此符号位要变成1
-43的原码:10101011
知道了它的原码,就可以利用关系来得出它的反码和补码了,举例来说:
负整数:-43
原码:10101011 符号位不变,后面7位取反得到反码
反码:11010100 符号位不变,将后面的数据与1相加得到补码
补码:11010101
负整数:-56
原码:10111000
反码:11000111
补码:11001000
这里需要提一下的是,在对反码加1得到补码的时候,是只对反码的最后一位加1(不是所有位!!!),如果有进位才会牵扯到前面。
2.小数的转换
小数的大体思路是和整数相似的,只不过有一点不同,就是小数的小数点的前一位就是符号位,也就是说对于小数是不用补位的。
正小数
正小数没有什么好说的,原码反码补码都是一样的,举例来说:
原码:0.1011
反码:0.1011
补码:0.1011
负小数
负小数间的转换也是和负整数类似的,都是原码反码补码之间关系的转换,举例来说:
负小数(二进制):-0.1011 由于是负数,所以改变符号位得到原码
原码:1.1011 符号位不变,其他位取反得到反码
反码:1.0100 符号位不变,将后面的加1得到补码
补码:1.0101
网友评论