用位运算实现两个数字比较大小
- 具体操作为获得a, b和a与b的差值的符号,然后利用difSab和sameSab这两个互斥(一个为1的时候另一个必然是0)的变量实现if和else的功能
- 利用加号左右两侧互斥的变量实现if else 的功能
取出数字最右侧位置的1
num & (~num + 1)位运算加法实现
- a和b异或,得到无进位加法结果
- a和b与的结果左移一位,得到进位的位置,二者相加
- 然后再把进位和无进位加法的结果求异或、与,左移一位,然后相加,重复上述步骤,直到没有进位为止
位运算减法实现
- 加一个数的相反数
- 相反数等于一个数字取反再+1
位运算乘法
- 假如一个数字二进制第k位是1,那么就将原始数字向左移k位,从k=0开始直到最大位,累加即可
位运算除法
- a/b
- b尽可能左移,但是不能超过a,假设移动了k1位,得到b’
- 那么除法的第k位一定是1
- 计算此时a-b’
- 然后再次将b左移,但是不超过上次a-b’的结果,移动了k2位
- 除法结果的第k2位也是1
- 循环往复
- 实际操作是a右移k位,判断是否比b大,原因是b左移可能溢出熬制不安全,符号位改变等等
- 最后假如有余数的话丢弃(就是b不移位也不能减)