前几天看源码.看到一个数字 x |= ( x >> 1),当时一脸懵逼,完全不知道这个符号"|="什么意思,就想去查一下.结果看别的给忘记啦…今天打开Eclipes 想整理一下写过的乱七八糟的Demo代码,忽然又看到了,就把心得写下来吧
按位操作
与& 两个2进制位,都是1时,结果为1,否则为0,比如 8 & 9,8=1000,9=1001;结果为1000,就是8;如果8 & 7,就是1000 & 0111,结果是0;
或| 两个2进制位,有一个为1,则结果为1,否则为0;比如8 | 9,结果为1001,就是9;如果8 | 7,则是1000 | 0111,结果是1111,就是15;
异或^ 两个2进制位,相同则为0,不同则为1;同样8 ^ 9,1000 ^ 1001;则除了最低位,其他全部相同,结果为1;而8 ^ 7则是 1000 ^ 0111,因为全部都不同,所以是15
非!(取反) 不常用,一个2进制数字,是1的位取反记做0,是0的位取反记做1;
8转为2进制是0000…1000(int是32位,最高位0表示正数,中间省略24位0) 全部取反,则是1111…0111(中间省略24位1), 则是-9;(这个有点难以理解,不常用)
可以用 Integer.toBinaryString(-9) 将一个数字转为2进制查看;最大的负数,-1,用2进制表示则全部32位都是1;
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(~8));
System.out.println(Integer.toBinaryString(-9));
int i = 5;
i |= ( i >> 1 );
i |= (i >> 1);
i |= (i >> 2);
i |= (i >> 4);
i |= (i >> 8);
i |= (i >> 16);
i++;
}