位运算(上)
位运算符
1.基础知识
位运算符是对操作数的二进制进行运算
逻辑运算符操作数和计算结果都是boolean型,而位运算符的操作数和技术结果都是整型
1.1位逻辑运算符
1.1.1 基础说明
&: (和&&的逻辑用法一致)
|:(和||的逻辑用法一致)
~:(和!的逻辑用法一致)
^:(异或逻辑,记忆方法:”异☞不同,当不同的时候做或运算“/”不同为1,相同为0“)也可以理解为不进位加法,1+1=0;0+0=0;1+0=1
代码展示
int a=3;
int b=4;
System.out.println(a&b);//0
System.out.println(a|b);//7
System.out.println(a^b);//7
System.out.println(~a);//-4
1.1.2 解释说明:
1.2 位移运算符
1.2.1 基础说明
<< //左移(原则:高位溢出,低位补0)
>> //右移(原则:低位溢出,有符号数高位:正数补0,负数补1)
>>>//无符号数右移(原则:低位溢出,无符号数高位:补0)
代码展示
int a=3;
System.out.println(a<<2);//12
int b=-3;
System.out.println(b<<2);//-12
int c=8;
System.out.println(c>>2);//2
int d=-8;
System.out.println(d>>2);//-2
int e=-8;
System.out.println(e>>>2);//1073741822
int f=8;
System.out.println(f>>>2);//2
1.2.2解释说明
正数的无符号右移和右移规则一致
2.常用算法
2.1 奇偶判断
方法:要判断的数和1相&;
//奇偶判断:与1相与进行位运算,得数为1是奇数,得数是0为偶数
int x=3;
int y=8;
System.out.println(x&1);
System.out.println(y&1);
2.2 两数交换
方法:一个数对自己异或一次,再异或另一个数,结果为另一个数(A异或A=0,A异或0=A)
int n=10;
int m=5;
System.out.println("n="+n+",m="+m);
swap(n,m);
}
public static void swap(int a,int b){
a=a^b;
b=a^b;//b=a^b^b=a
a=a^b;//a=a^b^a=b
System.out.println("n="+a+",m="+b);
}
2.3 获取二进制第n位是1还是0
方法:和1相与(经过左移n-1位)
Scanner scanner=new Scanner(System.in);
int m = scanner.nextInt();
int n=scanner.nextInt();
judgementBit(m,n);
scanner.close();
}
public static void judgementBit(int m,int n){
if((m&(1<<(n-1)))==0){
System.out.println("m的二进制第n位为0");
}else
System.out.println("m的二进制第n位为1");
}
2.4 不用判断语句,求整数的绝对值
方法:
- 性质补充:A^(-1)=~A
- 若A为int型,A为正数,A>>>31=0、A>>31=0;A为负数,A>>>31=1、A>>31=-1(不理解看前面的自己举个数字计算一下,前面有个错误是int型应该补为32位但是基本思路和流程没有错误)
- 补码的真值,取反加1
- 公式总结:(A^(A>>31))+(A>>>31))
public static void main(String[] args) {
abs(100);
abs(-19);
}
public static void abs(int a){
System.out.println("a的绝对值="+((a^(a>>31))+(a>>>31)));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧