位运算符操作

来源:互联网 发布:unity3d底层 编辑:程序博客网 时间:2024/05/18 10:29
package testJava.bit;public class 位运算符操作 {/** * gefei add 2014-3-19 19:15:52 * 鸣谢: 李东亮 * 参考: http://blog.csdn.net/lidongliang00001/article/details/21447495#comments *  */public static void main(String[] args) {int i = 2;// int有4个byte,1个byte有8个bit,所以int有32个bit// i换成32位2进制数,整体向左移2位(2位最低位补0,2位最高位直接被屏蔽【最高位=1是负数,=0是正数】),然后把最终的值赋给iSystem.out.println(i<<=2);// i换成32位2进制数,整体向左移8位(8位最低位补0,8位最高位直接被屏蔽【最高位=1是负数,=0是正数】),然后把最终的值赋给iSystem.out.println(i<<=8);byte j = 8;// j换成8位2进制数,整体向右移2位(2位最低位直接被屏蔽,2位最高位直接补0【最高位=1是负数,=0是正数】),然后把最终的值赋给jSystem.out.println(j>>=2);// j换成8位2进制数,整体向右移8位(8位最低位直接被屏蔽,8位最高位直接补0【最高位=1是负数,=0是正数】),然后把最终的值赋给jSystem.out.println(j>>=8);// & 【与】位运算符// 从低位开始比较,只有两边都是1时,结果为1,否则为0。System.out.println(19 & 25);// *010011 & *011001 = *010001  【19 & 25 = 17】// 该运算符的常见应用场景是从一串bit中【&抽取】一部分,例如想抽取1101101的低四位,用1101101&0001111就可以得到低四位1101了。// | 【或】位运算符// 从低位开始比较,两边有一位是1或都是1时,结果为1,否则为0。System.out.println(19 | 25);// *010011 & *011001 = *011011  【19 & 25 = 27】// 该运算符的常见应用场景是【|拼接】两串bit,例如想把1010接在1101101的后四位,用11011010000|00000001011就可以得到11011011011了。// ^ 【异或】位运算符// 从低位开始比较,两边位不同时,结果为1,否则为0。System.out.println(19 ^ 25);// *010011 & *011001 = *001010  【19 & 25 = 10】// ~ 【非】位运算符// 从低位开始比较,1变0,0变1。System.out.println(~25);// *011001 = *100110  【~25 = -26】// 李东亮的小例子    byte[] b=new byte[]{0x09,0x12};//0x09=00001001,0x12=00010010,一个字节为8为,为了方便理解,所以在前面补0,无其他意义。            // short 等于 2个byte 也就是16个bit    short s0 = (short) (b[1] & 0xff);// b[1]放在最低位 0000000000010010    short s1 = (short) (b[0] & 0xff);// b[0]放在最高位 0000000000001001    s1 <<= 8;// 左移8位                                0000100100000000    System.out.println((short) (s0 | s1));//s=        0000100100010010}}


 

0 0
原创粉丝点击