在Java中位运算方式总结

前提:位运算只能用于整型数值。

原因:位运算使用的是二进制,而整型在内存中就是按照二进制存储。

1.常见的位运算使用场景:

                位运算是一种计算机中的基本运算,它针对二进制位进行操作。Java中的位运算符包括按位与(&)、按位或(|)、按位异或(^)、取反(~)以及左移位和右移位运算符(<<, >>, >>>)等。

        位运算的优势:提高计算速度,节省内存等。

        (1).按位与运算(&):指的是两个数“二进制“位上对应的数,都为1,结果位上对应的数才为1.否则为0.     如下图所示

         (2).按位或运算 (|):指的是两个数“二进制“位上对应的数,都为0,结果位上对应的数才为0.否则为1.   如下图所示

          (3).按位异或运算(^):按位异或运算是指两个二进制数对应位上的数字不相同时,结果位上的数字为1;否则结果位上的数字为0。如下图所示:

           (4).取反运算(~):按位取反运算是指一个二进制数的每个位取反,即0变成1,1变成0。

如图所示,因为二进制表示位为32位,前面的0并未显示,当取反之后变成1,会显示出来

           (5.)左右移位:

                左移位:左移运算是将一个数的二进制位向左移动1位

                              作用:可以将数字扩大1倍

                右移位:右移运算是将一个数的二进制位向右移动1位

                                作用:可以将数字缩小1倍

使用场景:

                因为位运算的计算效率高,占用内存小等原因,在计算方面有许多优势。可以使用在求平均值,数字交换,判断奇偶数,扩大缩小数字,求2的n次幂,4的n次幂等

1.求平均值:

        int n = 8;
		int y = 10;
		int avg = (n&y)+((n^y)>>1);//求平均值

2.数字交换:

        int n = 8;
		int y = 10;
		n = n ^ y;
		y = n ^ y;
		n = n ^ y;

3.判断奇偶数:一个数和0按位与运算(n&0==0)等于0为偶数

                        一个数和1按位与运算(n&1==0)等于1为奇数

4.判断一个数是否为2的n次幂:

5.判断一个数是否为4的n次幂

        //求解4的幂
		//分析:是4的幂,必是2的幂
		//即先判断是否为2的幂,再判断是否为4的幂
		//如果是4的幂,则其二进制仅包含以后个1,并且一定在偶数位(低位从0开始计算)
        int b= 2048;
		int flag = 0b10101010101010101010101010101010;
		String ret1 = ((a & (a-1))==0)&&((b & flag)==0)?"是":"不是";
		System.out.printf("整数%d%s4的幂",b,ret1);		

6.数组中寻找出现次数为1次的

实现思路:将数组所有元素异或在一起(相同元素异或后为0)。就会得到

  • 38
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cph_507

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值