整型的机器级表示
在计算机中,整型的第一位为符号位,正数为0,负数为1。
原码表示
原码用首位表示符号,其余位表示值。
例如2的原码(8位二进制数表示):
$$ 00000010 $$
-2的原码:
$$ 10000010 $$
反码
正数反码等于原码,负数反码为按位取反。
例如2的反码:
$$ 00000010 $$
-2的反码:
$$ 11111101 $$
补码
正数补码等于反码,负数补码为反码+1。
例如2的补码:
$$ 00000010 $$
-2的补码:
$$ 11111110 $$
计算机一般用补码表示数据,对于8位数据来说,最小值是$10000000 (-2^7)$,最大值是$01111111 (2^7-1)$
浮点型机器级表示
十进制浮点数转二进制
我们不断将小数部分乘2,取整数部分,例如对于0.625,步骤如下:
0.625*2=1.25 取1
0.25*2=0.5 取0
0.5*2=1 取1
所以0.25的二进制小数就是0.101。
但是,对于0.2这种小数,我们用以上方法:
0.2*2=0.4 取0
0.4*2=0.8 取0
0.8*2=1.2 取1
0.2*2=0.4 取0
……
可以看到,这是一个无限循环的过程。在python中,我们计算0.4+0.2得到的不是正好0.6,这也是浮点数误差产生的原因。所以当我们判断两个浮点数是否相等时,我们不能用a= =b而要用fabs(a-b)<0.000001的原因。
IEEE754浮点数表示法
参考:https://blog.csdn.net/gao_zhennan/article/details/120717424
位运算入门
按位与
用&表示,运算规则为:1&1=1,1&0=0,0&1=0,0&0=0。
例如3&6=2
按位或
用|表示,运算规则为:1&1=1,1&0=0,0&1=0,0&0=0。
例如3&6=7
按位异或(xor)
用^表示,运算规则为:1&1=0,1&0=1,0&1=1,0&0=0。相同为0,不同为1。
例如3&6=5
异或有一个性质,如果a^b=c,那么c^b=a,c^a=b。
左移
即将全部二进制位向左移动,高位消失,最右边补0。
我们用6位数表示,例如100001左移1位后为000010。
右移
即将全部二进制位向右移动,低位消失,最左边补0。
我们用6位数表示,例如100001左移1位后为010000。