美文网首页CTF-Web安全信息安全专业知识
原码, 反码, 补码,移码和二进制数四则运算

原码, 反码, 补码,移码和二进制数四则运算

作者: 简言之_ | 来源:发表于2019-05-07 12:56 被阅读1次

    转载自:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/computercode.html
    https://www.jianshu.com/p/560aba49c9a4

    一. 机器数和真值

    在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.

    1、机器数

    一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

    比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

    那么,这里的 00000011 和 10000011 就是机器数。

    2、真值

    因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

    例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

    二. 原码, 反码, 补码,移码的基础概念和计算方法.

    在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.

    1. 原码

    原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

    [+1] = 0000 0001

    [-1] = 1000 0001

    第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

    [1111 1111 , 0111 1111]

    [-127 , 127]

    原码是人脑最容易理解和计算的表示方式.

    2. 反码

    反码的表示方法是:

    正数的反码是其本身

    负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    [+1] = [00000001] = [00000001]

    [-1] = [10000001] = [11111110]

    可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

    3. 补码

    补码的表示方法是:

    正数的补码就是其本身

    负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001] = [00000001] = [00000001]

    [-1] = [10000001] = [11111110] = [11111111]

    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    4. 移码

    补码的表示方法是:

    不管正负数,只要将其补码的符号位取反即可。

    X=-101011 , [X]原= 10101011 ,[X]反=11010100,[X]补=11010101,[X]移=01010101

    二进制数的算术运算

    二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。

    二进制数的加法

    根据“逢二进一”规则,二进制数加法的法则为:

    0+0=0
    0+1=1+0=1
    1+1=0 (进位为1) 
    1+1+1=1 (进位为1)
    
    

    例如:1110和1011相加过程如下:

    image

    二进制数的减法

    根据“借一有二”的规则,二进制数减法的法则为:

    0-0=0
    1-1=0
    1-0=1
    0-1=1 (借位为1)
    
    

    例如:1101减去1011的过程如下:

    image

    二进制数的乘法

    二进制数乘法过程可仿照十进制数乘法进行。但由于二进制数只有0或1两种可能的乘数位,导致二进制乘法更为简单。二进制数乘法的法则为:

    0×0=0
    0×1=1×0=0
    1×1=1
    
    

    例如:1001和1010相乘的过程如下:

    image

    由低位到高位,用乘数的每一位去乘被乘数,若乘数的某一位为1,则该次部分积为被乘数;若乘数的某一位为0,则该次部分积为0。某次部分积的最低位必须和本位乘数对齐,所有部分积相加的结果则为相乘得到的乘积。

    二进制数的除法

    二进制数除法与十进制数除法很类似。可先从被除数的最高位开始,将被除数(或中间余数)与除数相比较,若被除数(或中间余数)大于除数,则用被除数(或中间余数)减去除数,商为1,并得相减之后的中间余数,否则商为0。再将被除数的下一位移下补充到中间余数的末位,重复以上过程,就可得到所要求的各位商数和最终的余数。

    例如:100110÷110的过程如下:

    image

    相关文章

      网友评论

        本文标题:原码, 反码, 补码,移码和二进制数四则运算

        本文链接:https://www.haomeiwen.com/subject/ptcsvqtx.html