位运算
求两个数字a,b的和,用二进制形式,a(i)代表a的二进制第i位,分为以下四种情况
无进位和与异或运算规律相同,进位与与运算规律相同(并需要向左移一位),因此,无进位和n与进位c的计算公式如下:
n = a | b 非进位和:异或运算
c = a & b << 1 进位:与运算 + 左移一位
循环求n和c,直至c = 0;此时s = n,返回n即可
负数在计算机中用补码表示
补码:除了符号位,其余位取反,再加1
补码的优势:加法、减法可以统一处理(CPU只有加法器)
1 | public int add(int a, int b) { |
Java支持的位运算符:
&:按位与
|:按位或
~:按位非
^:按位异或
<<:左位移运算符
:右位移运算符
<<<:无符号右移运算符
除了~以外,其余均为二元运算符。操作数只能为整型和字符型数据。
正数符号位为0,负数为1
运算0为假,1为真
按位或与异或区别
按位或—— 1 | 1 = 1
按位异或—— 1 ^ 1 = 0
向下整除n//2等价于右移一位n>>1
取余数n%2等价于判断二进制最右一位值n&1;