美文网首页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

相关文章

  • 原码、反码、补码和移码

    书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...

  • 数值型数据的表示方法

    带符号数的表示方法 原码 补码 反码 移码

  • JAVA中负数的二进制表示

    计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,反码=原码按位取反 补码=反码+1。 移码为补码...

  • 原码、反码、补码

    正数 原码:一个数的二进制 反码:正数的反码就是其原码 补码:正数的补码就是其原码 例 负数 原码:一个数的二进制...

  • 2020-05-05

    1.反码和补码和移码 (1)正数的原码,补码,反码是一样的,并且符号位第一位是0,例如:9的原码:00001001...

  • python中的原码反码和补码

    python中的原码反码和补码 原码反码和补码的概念 原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位...

  • 一、数据的表示

    R进制转十进制(加权法) 十进制转二进制(短除法) 二进制转八、十六进制 原码、反码、补码、移码

  • 二进制原码、反码、补码运算及标志位

    一、二进制原码、反码、补码的转换 原码: 正整数的原码:这个数的二进制,符号位为0;正整数的原码=补码=反码 例1...

  • 一.计算机系统构成及硬件基础知识---原码补码反码及移码

    1. 在学习原码,反码,补码,移码之前,先了解机器数。 一个数在计算机中的二进制表现形式,叫做这个数的机器数。机...

  • 原码 反码 补码 移码

    原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为1,负数为0。剩下的...

网友评论

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

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