java初学者不常用的运算符 移位运算符和位运算符

移位运算符

1、左移运算符(<<)
左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0),如200<<3=200*2^3=1600

2、“无符号”右移运算符(>>)
“无符号”右移运算符,将运算符左边的对象向右移动运算符右边指定的位数(在高位补0),如200>>3=200/(2^3)=25

3、“有符号”右移运算符(>>>)
“有符号”右移运算符,将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,也就是说,">>>“和”>>"对正数的效果没有区别

public class ShiftOperate {
	public static void main(String[] args) {
		System.out.println(200<<3);
		System.out.println(200>>3);
		System.out.println(200>>>3);
		System.out.println(-200>>>3);
	}
}
1600
25
25
536870887

结果的解释:
200(2)=11001000(10)
200<<3⇔11001000000(2)=1600(10)
200>>3⇔11001(2)=25(10)
200>>>3⇔11001(2)=25(10)

-200:
在java中的储存形式(补码)是:11111111 11111111 11111111 00111000(2)
-200>>>3即右移三位,高位补1:11111111 11111111 11111111 11100111(2)=536870887(10)

注:原码反码补码的关系请见:java 负数与二进制(原码补码反码科普)

位运算符

按位与 & 按位或 | 按位异或 ^

public class BitwiseOperators {
	public static void main(String[] args) {
		int x=20;
		int y=12;
		
		/*
		 *  &操作符左右两侧如果是布尔值, &就是逻辑与;
		 *  左右两侧为整数,就是按位与
		 */
		System.out.print("true逻辑与false:");
		System.out.println(true&false);
		
		/*
		 * 20的二进制表示为:00000000 00000000 00000000 00010100(2)=20
		 * 12的二进制表示为:00000000 00000000 00000000 00001100(2)=12
		 * 20&12是按位与 : 00000000 00000000 00000000 00000100(2)=4
		 */
		System.out.print("20&12:");
		System.out.println(x&y);
		System.out.println();
		
		/*
		 * *************************我是分割线******************************
		 */
		
		/*
		 *  |操作符左右两侧如果是布尔值, |就是逻辑或;
		 *  左右两侧为整数,就是按位或
		 */
		System.out.print("true逻辑或false:");
		System.out.println(true|false);
		
		/*
		 * 20的二进制表示为:00000000 00000000 00000000 00010100(2)=20
		 * 12的二进制表示为:00000000 00000000 00000000 00001100(2)=12
		 * 20&12是按位或 : 00000000 00000000 00000000 00011100(2)=28
		 */
		System.out.print("20|12:");
		System.out.println(x|y);
		System.out.println();
		
		/*
		 * *************************我是分割线******************************
		 */
		
		/*
		 *  ^操作符左右两侧如果是布尔值, ^就是逻辑异或;
		 *  左右两侧为整数,就是按位异或
		 */
		System.out.print("true逻辑异或false:");
		System.out.println(true^false);
		
		/*
		 * 20的二进制表示为:00000000 00000000 00000000 00010100(2)=20
		 * 12的二进制表示为:00000000 00000000 00000000 00001100(2)=12
		 * 20&12是按位或 : 00000000 00000000 00000000 00011000(2)=24
		 */
		System.out.print("20^12:");
		System.out.println(x^y);
	}
}
true逻辑与false:false
20&12:4

true逻辑或false:true
20|12:28

true逻辑异或false:true
20^12:24

发布了31 篇原创文章 · 获赞 0 · 访问量 330

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/104183646