Java位运算

来源:互联网 发布:最优化求解软件 编辑:程序博客网 时间:2024/06/12 09:03

Java提供4个位运算符号,分别是:&,| ,^ ,~,<<,>>
 
1,& (与):
 
从低位开始比较,两边都是1时,结果为1,否则为0。例如19 & 25即为 10011 & 11001,等于10001。
该运算符的常见应用场景是从一串bit中抽取一部分,例如想抽取1101101的低四位,用1101101&0001111就可以得到低四位1101了。
 
2,|(或):
 
从低位开始比较,两边有一位、或者都是1时,结果为1,否则为0。例如19 |25即为 10011 | 11001,结果就等于11011。
该运算符的常见应用场景是拼接两串bit,例如想把1010接在1101101的后四位,用11011010000|00000001011就可以得到11011011011了。
 
一般还可以用|,通过byte数组来构造一个short或int。例如现在有2个字节byte[]{0x09,0x12},需以大端模式(注:此处为示例,涉及字节序和16进制表示,如果不懂,可以跳过。)转换为short,我们知道short本身就是由两个字节拼成的,那如何把两个字节进行拼接呢,这里就用到或运算符了 |.
具体实现如下
 
 
      byte[] b=new byte[]{0x09,0x12};//0x09=00001001,0x12=00010010,一个字节为8为,为了方便理解,所以在前面补0,无其他意义。   
    short s = 0;
  
    short s0 = (short) (b[1] & 0xff);// b[1]为高地址,放在最低位
    short s1 = (short) (b[0] & 0xff);// b[0]为低地址,放在最高位
    s1 <<= 8;
    s = (short) (s0 | s1);
    //s=0000100100010010

 
 
3,^(异或)
 
从低位开始比较,两边位不同时,结果为1,否则为0。例如 12^9=5;//1100^1001=0101
 
4,~(非)
 
从低位开始比较,1变0,0变1.
 
 
 
5,<<(左移)
 
将目标在低位补0,溢出的丢弃
 
例1:
 
2<<2=8//10<<2=1000,左移补0;
 
 
 
例2:
 
byte a=26;//11010
 
a<<4;//=110100000 共九位,但是我们知道,byte最高为8位,所以要把高位丢弃,最终结果为10100000
 
System.out.println(a);//160
 
 
 
6,>>右移
 
将目标从低位开始,丢弃n位
 
byte a=26;//11010
 
a>>2;//=110
 
System.out.println(a);//6

0 0
原创粉丝点击