每日学习-Java基础(六)操作符4(位操作符)

一、位操作符

    // &   位与
	// |   位或
	// ^   按位异或
	// ~   按位取反
	// <<  左移
	// >>  右移,带符号   正数还是正数, 负数还是负数
	// >>> 右移,无符号   正数、负数都变正数

二、代码

public static void main(String[] args) {
	int i = 5;
	System.out.println(Integer.toBinaryString(i));
	
	// 1: | 位或 每一位进行或运算,任意为1则为1,都为0则为0
	int x = 5; // 0b101
	int y = 6; // 0b110
	//   0b101
	// | 0b110
	// = 0b111 = 7
	System.out.println(x + " | " + y + " = " + (x | y));

	// 2: & 位与 每一位进行与运算,任意为0,则为0,都为1则为1
	//   0b101
	// & 0b110
	// = 0b100 = 4
	System.out.println(x + " & " + y + " = " + (x & y));

	// 3: ^ 异或 不同为1,相同为0
	//   0b101
	// ^ 0b110
	// = 0b011 = 3
	System.out.println(x + " ^ " + y + " = " + (x ^ y));
	
	// 4: ^ 异或拓展
	// 任意数与自身进行异或 都等于0
	System.out.println(x + " ^ " + x + " = " + (x ^ x));
	// 任意数与0进行异或 都等于自身
	System.out.println(x + " ^ " + 0 + " = " + (x ^ 0));

	byte b = 5;
	// 5: ~ 取反 0变1,1变0
	// ~ 0b00000101
	// = 0b11111010 = -6(最高位为1,是负数,减1取反可得到数值6,再加上负号) 
	System.out.println("~" + x + " = " + (~x));
	
	
	// 6:<< 左移  右边补0
	//     0b110  = 6
	// <<1  左移1位 
	// =   0b1100 = 12
	System.out.println(y + " << 1" + " = " + (y << 1));
	
	int j1 = -6;
	//     11111111111111111111111111111010 = -6
	// <<1  左移1位
	// =   11111111111111111111111111110100 = -12
	System.out.println(j1 + " << 1" + " = " + (j1 << 1));
	
	
	// 7:>> 右移 带符号  正数左边补0,负数左边补1
	//     0b110 = 6
	// >>1   右移1位
	// =   0b011 = 3
	System.out.println(y + " >> 1" + " = " + (y >> 1)); // 正数还是正数
	
	int j2 = -6;
	//     11111111111111111111111111111010 = -6
	// >>1  右移1位
	// =   11111111111111111111111111111101 = -3
	System.out.println(j2 + " >> 1" + " = " + (j2 >> 1)); // 负数还是负数
	
	
	// 8:>>> 无符号右移 左边补0
	int j3 = 6;
	//     0b110 = 6
	// >>1  右移1位
	// =   0b011 = 3
	System.out.println(j3 + " >>> 1" + " = " + (j3 >>> 1)); // 正数还是正数
	
	int j4 = -6;
	//      11111111111111111111111111111010 = -6
	// >>>1  右移1位
	// =    01111111111111111111111111111101 = 2147483645
	System.out.println(j4 + " >>> 1" + " = " + (j4 >>> 1)); // 负数变正数
	
}

三、练一练

    int aa = 2;
	int bb = 3;
	System.out.println( (aa | bb) ^ (aa & bb) <<1  >>>1); // ?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值