一文了解位逻辑运算符

Posted 超人汪小建(seaboat)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文了解位逻辑运算符相关的知识,希望对你有一定的参考价值。

本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识。一共99节课,每节课只需几毛钱。
作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书写作、运动、画画。崇尚技术自由,崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解Java并发》、《图解数据结构与算法》、《人工智能原理科普》。

位逻辑运算符

位逻辑运算符是指按位进行的逻辑运算。前面我们学习的逻辑运算符包括了“与或非”三种逻辑运算,而且它们的操作数必须为 boolean 类型。位逻辑运算符除了提供“与或非”之外,它还提供了异或逻辑,四个运算符的符号分别为 &、|、~、^。

位逻辑运算规则

位逻辑运算会先将操作数转成二进制后再进行逻辑运算,所以位逻辑运算针对的对象是 byte、short、int、long 和 char 类型,因为它们都属于整型或者可以转换成整型值。转换成二进制的操作数将按位参与运算,最终的运算结果也是一个整型值。比如 byte 类型的 5&7,转成二进制后为 00000101&00000111, 运算时两个操作数从高位到低位依次进行与运算,结果是 00000101。

位逻辑运算语法

位逻辑运算的“与”、“或”、“异或”三个运算属于二元运算,需要两个操作数参与,而“非”运算则属于一元运算,只需一个操作数参与。详细的语法如下所示。

下面看具体的例子,int 类型是 32 位的,所以 7 转成二进制后为 00000000 00000000 00000000 00000111,而 15 转成二进制后为 00000000 00000000 00000000 00001111,每个位进行与运算,结果为 00000000 00000000 00000000 00000111,即整型的结果为 7。每个位进行或运算,结果为 00000000 00000000 00000000 00001111,整型的结果为 15。每个位进行异或运算,结果为 00000000 00000000 00000000 00001000,整型的结果为 8。对变量 a 的每个位进行非运算,结果为 11111111 11111111 11111111 11111000,整型的结果为 -8。此外,对于 char 类型的变量 e 和变量 f,转成整型后的值分别为 97 和 98,执行与运算后的结果为 96。

输出结果如下。

多义的 & 与 |

按位与运算符 & 和 按位或运算符 | 看起来是不是有点眼熟?没错,它们分别与逻辑运算符中的逻辑与和逻辑或的非短路符号的写法一样。通过下面例子来体会它们之间的差异,可以看到虽然都是相同的 & 和 | 符号,但是操作数的数据类型是不一样的,而且运算的结果也是不同的。

输出结果如下。

以上是关于一文了解位逻辑运算符的主要内容,如果未能解决你的问题,请参考以下文章

Java基础-一文搞懂位运算

Java基础-一文搞懂位运算

C#--运算符

&、|、^ 是按位运算符还是逻辑运算符?

一文浅谈:&和&&的区别

为啥这个逻辑/按位运算返回 1?