进制

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

posted on 2016-09-21 16:15  反光的小鱼儿  阅读(237)  评论(0编辑  收藏  举报