左移 (<<) / 右移 (>>)注意细节

1.位运算符 << 和 >>

位运算是直接对整型数据的二进制进行运算。

/*
	结论:
		1.位运算符操作的都是整型的数据
		2.	<< : 在一定范围内,每向左移 1 位,就相当于 * 2;
			>> :  在一定范围内,每向右移 1 位,就相当于 / 2;

	面试题:最高效的计算 2 * 8?
			2 << 3 / 8 << 1
*/
class  BitTest{
	public static void main(String[] args) {
		int a = 21;
		// System.out.println("a << 2 = " + a << 2);	编译失败:String类型的数据无法使用 <<
		// 为什么编译失败呢?
		// 是因为" a << 2 = " 后面使用 + 号 拼接,所以,系统无法使字符串类型的数据进行 << 
		System.out.println("a << 2 = " + (a << 2));	// 21 * 2^2 --> 21 * 4 = 84
		System.out.println("a << 3 = " + (a << 3));	// 168
	}
}

上述结论说特别说明了 << 和 >> 是在一定的范围内进行,如果超出范围,奇迹就发生了!

/*
	结论:
		1.位运算符操作的都是整型的数据
		2.	<< : 在一定范围内,每向左移 1 位,就相当于 * 2;
			>> :  在一定范围内,每向右移 1 位,就相当于 / 2;

	面试题:最高效的计算 2 * 8?
			2 << 3 / 8 << 1
*/
class  BitTest{
	public static void main(String[] args) {
		int a = 21;
		// System.out.println("a << 2 = " + a << 2);	编译失败:String类型的数据无法使用 <<
		// 为什么编译失败呢?
		// 是因为" a << 2 = " 后面使用 + 号 拼接,所以,系统无法使字符串类型的数据进行 << 
		System.out.println("a << 2 = " + (a << 2));	// 21 * 2^2 --> 21 * 4 = 84
		System.out.println("a << 3 = " + (a << 3));	// 168
		System.out.println("a << 27 = " + (a << 27));	// -1476395008
	}
}

注意上述代码: 21 << 27 位之后,结果为负数。
用图解释:
左移 (<<) / 右移 (>>)注意细节_第1张图片

你可能感兴趣的:(java)