原码,反码,补码,和取反运算——适用于二进制底层的概念理解

我们日常用的数字是给我们人类用的,所以叫真值。而机器(计算机)理解的数字通常是二进制所组成的数字,所以称为机器数。

二进制在内存中以补码形式在其中存储,计算机计算数字是通过补码的形式进行计算的,也就是说不管正数,还是负数在计算机里面,都要用补码来表示。

在原码,反码,补码中,最高位来表示正负,用0表是正,1表示负;

如十进制的10表示为:+1010--->原码:0 1010;-1010--->原码: 1 1010;

笔记一:原码,反码,补码

*规则:

正数中:原码=反码=补码;例子拿上面的:+1010---> 0 1010;

+1010--->原码: 0000 1010;(最高位0表示负号)

+1010--->反码: 00000 1010;

+1010--->补码: 0000 1010;

负数中的规则如下:例子拿上面的:-1010---> 1 1010;

-1010--->原码: 1000 1010;(最高位1表示正号)

-1010--->反码: 1111 0101;(符号位不变,数值位:0变1,1变0)

-1010--->补码: 1111 0110;(符号位不变,数值位:0变1,1变0。最后得出来的数字再加1。简单点总结为:“反码加1”)

笔记二:取反。

注意:取反运算不等同于求补码!

*“~”这个小波浪号叫取反。~10=-11,~(-10)=9。

规则:对一个数进行取反运算时,先对这个数按位取反得出值X1,再对X1求补码,即得出结果。

例子:对57进行取反。

其57按位取反后二进制表示为(表示一个字节  8bit) 1100 0110

1100 0110  (最前面的第一位表示符位 )

1表示次数为负数

1100 0110  可表示为     -(2^6+2^2+2^1) = -70;

不管正数,还是负数在计算机里面,都要用补码来表示

即补码=符号位以后的按位取反后加1    

反之减1

所以 -70 = 1100 0110 符号位以后按位取反后再加一为 1011 1010 = -58

即~57 = -58;

负数反之即可。

其实简单点,这个符号的运算法则是:如果一个数取反,那么值等于这个数的相反数再减去1。总结:~X=(-X-1)。

猜你喜欢

转载自www.cnblogs.com/hmy-666/p/12301888.html