运算符位运算以及java对乘法运算的优化

1、位运算

必备基础知识
  • 在计算机中都是以二进制数存储的,对于相应的二进制数,有位运算,这里是针对数值的二进制形式。
与运算 &
public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = 74;
		byte b = 50;
		System.out.println(a&b);
	}
}

在这里插入图片描述

  • 这里的运算规则位两个数1或者0,都为1时结果为1,否则为0。最后结果就是0000 0010为2。
或运算 |
public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = 74;
		byte b = 50;
		System.out.println(a|b);
	}
}

在这里插入图片描述

  • 这里面时两个数都为0时结果为0,否则为1。结果是0111 1010。结果是122。
异或 ^
public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = 74;
		byte b = 50;
		System.out.println(a^b);
	}
}

在这里插入图片描述

  • 两个数相同结果为0,否则为1。结果0111 1000。结果是120。
取反 ~
public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = 74;
		System.out.println(~a);
	}
}

在这里插入图片描述

  • 包含符号为各位取反,结果为:1011 0101.。为-75。
左移 <<
public class Main {
	public static void main(String\u005B\u005D args) {
		byte b = (byte) (a<<3);
		System.out.println(b);
	}
}

在这里插入图片描述

  • 前三位丢失,后五位向前移三位,最后三位补领。这里的第一位是符号位。结果为80。
右移动 >>
public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = 74;
		byte b = (byte) (a>>4);
		System.out.println(b);
	}
}

在这里插入图片描述
在这里插入图片描述

public class Main {
	public static void main(String\u005B\u005D args) {
		byte a = -74;
		byte b = (byte) (a>>4);
		System.out.println(b);
	}
}

在这里插入图片描述
在这里插入图片描述

  • 右移对于无符号类型强制补0,对于有符号类型续补符号位。

  • 无符号右移( >>> )(没有无符号左移( <<< )

  • 无符号右移,忽略符号位,空位都以0补齐>>> 与>>唯一的不同是它无论原来的最左边是什么数,统统都用0填充。

于java对乘法运算的优化

  • 位运算是高效的运算方法,对于左移和右移只不过是对二进制数的乘2的倍数或者除2的倍数。
  • 在计算机中内部处理123 * 237是如何计算的呢,难道是123个237相加?答案是否定的,因为如果这么计算的话,计算机处理大批量数据的时候就会出现卡顿,而我们用java程序计算时实际上调用的是计算机的位运算。
123 * 237
=123 * 128 + 123 * 64 + 123 * 32 + 123 * 8 + 123 * 4 + 123 * 1
=123 << 7 + 123 << 6 + 123 << 5 + 123 << 3 + 123 << 2 +123

这样计算就快了很多,也是咱们java程序对计算机的乘法的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值