编码规则
有符号数的编码规则
原码:最高位是符号位,对其他位进行本身的绝对值即可
反码:
• 正数:反码和原码相同
• 负数:符号位是1,其余位对原码取反。
补码:
• 正数:补码和原码相同
• 负数:符号位是1,反码+1
>测试:
限定字节八位
#如果是正数
1:
#原码 0 0 0 0 0 0 0 1
#反码 0 0 0 0 0 0 0 1
#补码 0 0 0 0 0 0 0 1
#如果是负数
-1:
#原码 1 0 0 0 0 0 0 1
#反码 0 1 1 1 1 1 1 0
#补码 1 1 1 1 1 1 1 1
-7:
#原码 1 0 0 0 0 1 1 1
#反码 1 1 1 1 1 0 0 0
#补码 1 1 1 1 1 0 0 1
寄存器
mov 寄存器 向寄存器存值
例:mov EAX -1
EAX:FFFFFFFF (一个F代表4个1,其中最高位的1是符号位)负数在计算机中以补码
形式存储
FFFFFFFF如果是无符号的是正数,有符号的是负数
学习通过直接操作来查看是最有效的
位运算
计算机现在可以存储所有的数字(整数、浮点数、字符)的运算!
2*8最高效的计算方式? :2<<3
很多底层的调试器,需要通过位来判断CPU的状态
与运算( and &):
相当于串联电路
1011 0001
1101 1000
————— &
1001 0000
或运算( or | ):
相当于并联电路
1011 0001
1101 1000
————— |
1111 1001
异或运算(xor ^)
相同为0 不相同为1
1011 0001
1101 1000
————— ^
0110 1001
非运算(not ~)
单目运算符,取反
1011 0001
————— ~
0100 1110
位运算(移动位)
左移:(shl << ) 全部位左移,高位丢弃,低位补0
右移:(shr >>) 全部位右移,低位丢弃,高位正数补0负数补1