逻辑与,逻辑或,逻辑异或;按位与,按位或,按位异或
符号表达:
1 2 3 4 5 | 逻辑与 逻辑或 逻辑异或 按位与 按位或 按位异或 按位非 & | ^ ~ |
说明:很多人不容易理解这些符号的说明,就很迷糊,这里我用简单的语言进行说明,看完相信你会有所收获!
逻辑:带有这两个字的通常就是两个boolean表达式的运算。比如:(3>5) & (1<2)
按位:带有这两个字的通常是十进制数或者二进制数的运算。比如:3 | 5
解释说明:
这是我自己总结的,相信在日常的编码中你能够更深的理解这些代码的意思:
1 2 3 4 5 6 7 8 | 逻辑与:两边的表达式有一项为假,结果就为假。两边的表达式全为真,结果才为真。 逻辑或: 两边的表达式有一项为真,结果就为真。两边的表达式全为假,结果才为假。 逻辑异或:真假为真,真真为假,假假为假。 ============================================== 按位与:两个二进制对应位都为1时,结果为1,否则结果为都0 按位或:两个二进制对应位都为0时,结果为0,否则结果为都1 按位异或:两个二进制对应位相同时,结果为0,否则结果为1 按位非:原码位为0,运算后得1,原码位为1,运算后得0 |
代码演示:
一个数转二进制的方法,这里就不再进行阐述。可以自行查阅文档进行学习。
我们先看逻辑操作这边的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int a = 5 ; //0000 0101 int b = 3 ; //0000 0011 System.out.println( "逻辑与:" + ((a > b) & (b > 3 ))); System.out.println( "逻辑或:" + ((b > 3 ) | (a > b))); System.out.println( "逻辑异或:" + ((a > 3 ) ^ (b > 5 ))); System.out.println( "逻辑异或:" + ((a > 3 ) ^ (b < 5 ))); System.out.println( "逻辑异或:" + ((a < 3 ) ^ (b > 5 ))); ----------------------------------------------------------------------- 结果为: 逻辑与: false 逻辑或: true 逻辑异或: true 逻辑异或: false 逻辑异或: false |
按位这边的代码:
1 2 3 4 5 6 7 8 9 10 | int a = 5 ; //0000 0101 int b = 3 ; //0000 0011 System.out.println( "按位与:" + ( 3 & 5 )); //0000 0001 System.out.println( "按位或:" + ( 3 | 5 )); //0000 0111 System.out.println( "按位异或:" + ( 3 ^ 5 )); //0000 110 ========================================= 结果为:自行验算上边的二进制转为十进制的数 按位与: 1 按位或: 7 按位异或: 6 |
拓展1:&= , |= , ^=
在有些地方我们有可能会见到这样的符号:&= , |= , ^=
这样的符号其实就是一个赋值类的操作。
我们来举个例子:
1 2 3 4 | int a = 5 ; //0000 0101 int b = 3 ; //0000 0011 a ^= b; System.out.println(a); //a = a^b |
其实这个跟我们学过的+=是一个意思。
扩展2:java中用方法进行进制转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //十进制转成十六进制: System.out.println(Integer.toHexString( 10 )); //十进制转成八进制 System.out.println(Integer.toOctalString( 10 )); //十进制转成二进制 System.out.println(Integer.toBinaryString( 10 )); //十六进制转成十进制 System.out.println(Integer.valueOf( "FFFF" , 16 ).toString()); //八进制转成十进制 System.out.println(Integer.valueOf( "010" , 8 ).toString()); //二进制转十进制 System.out.println(Integer.valueOf( "0101" , 2 ).toString()); //将2、8、16进制直接转为10进制 System.out.println(Integer.parseInt( "1010" , 2 )); System.out.println(Integer.parseInt( "012" , 8 )); System.out.println(Integer.parseInt( "FFFF" , 16 )); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话