剑指offer里面有一道算法题,就是不用加减乘除去做加法。很明显就是要用位运算完成加法,所有运算在计算机底层都是由二进制完成的,所以不能用运算符,就只能用位运算了。
java中的位运算
在Java里面,位运算对应运算符如下:
位运算 | 运算符 |
---|---|
与 | & |
或 | | |
异或 | ^ |
非 | ! |
左移位 | < |
右移位 | > |
二进制数的加法
在计算机底层中,数的运算是通过位运算完成的,而位运算的对象是二进制数。下面看一下二进制的加法是怎么一个过程:
十进制数:3 + 5
相当于二进制数:11+101
二进制运算也是一位一位地相加,如果两个数当前位都为1,则左边一位加上1。在看下面的变形,其实就是用位运算模拟进位过程,上面的数是原来的两个数的异或值&#x