300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 机器数 真值 原码 反码 补码 位运算

机器数 真值 原码 反码 补码 位运算

时间:2021-08-26 02:11:02

相关推荐

机器数 真值 原码 反码 补码 位运算

位运算在下面,点目录部分跳转

机器数

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

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

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

真值

机器数第一位为符号位,所以机器数的形式值不等于真正的数值。所以,将带符号位的机器数对应的真正数值称为机器数的真值。例:

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

原码

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

​ [+1]原 = 0000 0001[-1]原 = 1000 0001

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

[1111 1111 , 0111 1111]

[-127 , 127]

一个字节表示范围 -128~127

注:一个+0表示为:00000000,一个-0表示为:1000000,因为符号位不算在里面,所以就会有 两个0,所以从一开始发明二进制的时候,就把-0规定为-128,如此二进制的补码就刚好在计算机中运作中吻合。

反码

反码的表示方法是:

正数的反码是其本身

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

[+1] = [00000001]原 = [00000001]反[-1] = [10000001]原 = [11111110]反

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

补码

补码的表示方法是:

正数的补码就是其本身

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

[+1] = [00000001]原 = [00000001]反 = [00000001]补[-1] = [10000001]原 = [11111110]反 = [11111111]补

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

负数原码为绝对值二进制最高位取1, 负数的反码是原码(符号位除外)按位取反, 负数补码是反码+1

对于正数因为三种编码方式的结果都相同:

[+1] = [00000001]原 = [00000001]反 = [00000001]补

原码到补码的计算方式:取反+1,

补码到原码的计算方式:-1再取反。

反码求和

0和0相加是0,但要产生一个进位1,0和1相加是1,1和1相加是0。若最高位相加后产生进位,则最后得到的结果要加1

补码求和

补码加法运算:两个相加的数无论正负,只要表示成对应的补码形式,则可直接按二进制规则相加,且符号位作为数的一部分直接参与运算,所得结果就是和的补码形式,用关系式表示(溢出位舍去)

补码于补码的计算结果,还是一个补码。如果需要通过补码计算原码,只需要对这个数字再求补即可。

[x]补 + [y]补 = [x+y]补

2、补码减法运算:

[x-y]补 = [x+(-y)]补 = [x]补 + [-y]补

位运算

左移操作(<<)

规则:

右边空出的位用0填补

高位左移溢出则舍弃该高位。

右移操作(>>)

规则:

左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;

低位右移溢出则舍弃该位。

其它的四种位运算:

与运算(&)

1、与0相与可清零

2、与1相与可保留原值

或运算(|)

1、与0相或可保留原值

2、与1相与可齐设1

异或运算(^)

1、与0异或保留原值

2、与1异或比特值反转

3、可通过某种算法,使用异或实现交换两个值

异或运算是有结合律的

取反(~)

位运算概览 对两个数的补码运算

参考资料:

(/zhangziqiu/archive//03/30/ComputerCode.html)

(/yyangblog/archive//01/14/1935656.html)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。