我们日常用的数字是给我们人类用的,所以叫真值。而机器(计算机)理解的数字通常是二进制所组成的数字,所以称为机器数。
二进制在内存中以补码形式在其中存储,计算机计算数字是通过补码的形式进行计算的,也就是说不管正数,还是负数在计算机里面,都要用补码来表示。
在原码,反码,补码中,最高位来表示正负,用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)。