计算机只认识0和1,计算机能做的运算归根结底也就是直接对0和1做运算(通常称为
位运算
)
- 与运算
两个位都为1时,结果为1
and(&)
- 或运算
只要有一个为1 就是1
or(|)
- 异或运算
不一样的时候是1
xor(^)
- 非运算(单目运算)
0变1 1变0
not(~)
- 左移
各二进制位全部左移若干位,高位丢弃,低位补0
shl(<<)
- 右移
各个二进位全部右移若干位,低位丢弃,高位补0或者补符号位
shr(>>)
在汇编中shr
补0,sar
补符号位
计算机中的加减乘除
加法
以下计算假设数据宽度均为一个字节 (8Bit)
不考虑进位的情况异或
和按位相加
的结果类似,所以加法可分为两步
- 加数
异或
运算,获得值 - 加数
与
运算。判断是否有进位 - 如果
与
计算后为0 说明第一步即为结果,如果不为零则需要把与
运算后的值左移一位, - 继续重复上述过程 直到不再进位时为最终结果
4+5的运算过程 4 => 0000 0100 5 => 0000 0101 1) 异或 0000 0100 0000 0101 xor --------- 0000 0001 2) 判断是否有进位 两个加数判断 0000 0100 0000 0101 and --------- 0000 0100 与运算后并不为0 说明 有进位 此位不为0 因为发生了进位所以要左移一位继续异或 3) 有进位 继续异或 判断需要进位的左移一位,进位操作后继续异或 0000 0001 0000 1000 xor --------- 0000 1001 4) 判断上一步操作是否进位 0000 0001 0000 1000 and --------- 0000 0000 结果为零 说明没有任何进位 则上一步结果 0000 1001 为4+5的值 0000 1001 十进制为9 证明计算正确
减法
计算机做减法,就是做加法
4-5 = ? 4-5 = 4+ (-5) 4 => 0000 0100 -5 => 1111 1011 1) 异或 0000 0100 1111 1011 xor --------- 1111 1111 2) 判断是否有进位 两个加数判断 0000 0100 1111 1011 and --------- 0000 0000 结果为零 说明没有任何进位 则上一步结果 1111 1111 为4+(-5)的值 1111 1111 十进制为-1 证明计算正确
乘法
X * Y 本质为 Y 个 X 相加
除法
X / Y 本质为减法 Y 一共能减去多少次Y
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论