进制
16进制(0x)是1位数表示4位,如0x11二进制表示为00010001
8进制(0)是1位数表示3位,如023二进制表示为010011
2进制(无)
位运算符
& 与运算符:2个操作数 都为1,结果才为1,否则为0
| 或操作符:。。。。。 只要有1个位1,结果就为1,否则为0
~ 非操作符:。。。。。 ~0=1;~1=0
^ 异或操作符:。。。。 位相同为0,位不同为1
移位运算符
左移运算符(<<):将运算符左边的对象,向左移动运算符右边指定的位数,并且低位补0
向左移动n位,相当于(十进制)乘上2的n次方
右移运算符(>>>):将运算符左边的对象,向右移动运算符右边指定的位数,并且高位补0
向右移动n位,相当于(十进制)除上2的n次方
带符号右移运算符(>>):将运算符左边的对象,向右移动运算符右边指定的位数
如果是正数,在高位补0;如果是负数,在高位补1
负数的二进制如何得出
相信正数的二进制表示大家都懂,但是这个-4怎么来的?二进制编码中首位0代表负,1代表正。而4的二进制编码是00000000 00000000 00000000 00000100,那么轻而易举得出-4就是10000000 00000000 00000000 00000100,但是显然用计算机得出的结果并不是如此。下面讲如何转换。
其实-4的二进制编码=4的补码,而 补码 = 源码取反+1。
先对 00000000 00000000 00000100取反后是11111111 11111111 11111111 11111011,取反后加1得11111111 11111111 11111111 11111100,正是最后结果。
记住负数二进制其实是正数补码,即取反后加1所得。
常用举例
不用临时变量交换两个数:
a ^= b;
b ^= a;
a ^= b;
//判断1个数的奇偶性 boolean isOddNumber(int n){ return (n & 1) == 1; }
获取int最大值:
(1 << 31) - 1;
获取int最小值:
(1 << 31)
获取long最大值:
((long)1 << 127) - 1;
((long)1 << 255) - 1;//这也可以
最小值类似int