位运算的基础知识整理

本文介绍了位运算的基础知识,包括按位与、或、异或、取反、左移和右移操作。并详细讨论了位运算在判断奇偶数、交换数值、找出不重复的数、计算次方以及子集枚举等实际应用中的巧妙运用。
摘要由CSDN通过智能技术生成

位运算的概述

&(按位与):如果两个相应的二进制位都为1,则结果为1,否则结果为0。

|(按位或):两个相应的二进制位中只要有一个为1,则结果为1,否则结果为0。

^(按位异或):若参加运算的两个二进制位值相同,则结果为0,否则结果为1。

~(取反):对一个二进制数按位取反,即将0变为1,将1变为0。

<<(左移):用来将一个数的各二进制位全部左移N位,右边补0。

>>(右移):用来将一个数的各二进制位全部右移N位,移到右边的低位舍弃,对于无符号的数,高位补0;对于有符号的数,如果原符号位(即最高位)为1,则高位补1,如果原符号位为0,则高位补0。

位运算的应用

判断奇偶数

如果把n以二进制的形式展示的话,判断奇偶数只需要判断最后一个二进制位是0还是1就可以了,如果是1则为奇数,否则为偶数。

        int n = 5;
        if ((n & 1) == 1) {
   
            System.out.println("n是一个奇数");
        }
交换两个数的值

由上述^运算的定义可知,x^x=0,xyz=xzy,n^0=n,则可据此在不使用辅助变量的前提下交换两个数的值。

        int x = 5;
        int y = 9;
        x = x ^ y;
        //y=(x^y)^y=x^(y^y)=x^0=x;
        y = x ^ y;
        //x=(x^y)^x=(x^x)^y=0^y=y;
        x = x ^ y;
        System.out.println("x=" + x + ";y=" + y);

//输出结果:x=9;y=5
找出没有重复的数

适用场景:给出一组整数,其中一个数只出现了一次,其他的数都出现了两次,让找出这个只出现了一次的数。

由上述运算的定义可知,xx=0,xyz=xzy,n0=n,则将所有的数一起做,出现了两次的数都会被消掉。

        int[] arr = {
   1, 2, 3, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值