位运算符操作

1 篇文章 0 订阅
1 篇文章 0 订阅
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是正数】),然后把最终的值赋给i
		System.out.println(i<<=2);
		// i换成32位2进制数,整体向左移8位(8位最低位补0,8位最高位直接被屏蔽【最高位=1是负数,=0是正数】),然后把最终的值赋给i
		System.out.println(i<<=8);
		
		byte j = 8;
		// j换成8位2进制数,整体向右移2位(2位最低位直接被屏蔽,2位最高位直接补0【最高位=1是负数,=0是正数】),然后把最终的值赋给j
		System.out.println(j>>=2);
		// j换成8位2进制数,整体向右移8位(8位最低位直接被屏蔽,8位最高位直接补0【最高位=1是负数,=0是正数】),然后把最终的值赋给j
		System.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
	}

}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值