Java基础的按位运算符,你写过类似的代码吗?
上一篇文章介绍移位运算符,本文介绍按位运算符。
概述
按位运算符处理二进制数字或输入值的位,我们可以将这些应用于整数类型:long、int、short、char和 byte。
计算过程:
- 首先,操作数被转换为它们的二进制表示
- 接下来,将运算符应用于每个二进制数并计算结果
- 最后,将结果转换回其十进制表示形式
Java 提供了以下位运算符:按位运算符用于整数值,&|^与布尔值一起使用时充当条件运算符。
运算符 | 符号 | 解释 |
---|---|---|
& | x & y | 如果 x 和 y 是整数类型,则执行按位与运算。 |
| | × | y | 如果 x 和 y 是整数类型,则执行按位或运算。 |
^ | x^y | 如果 x 和 y 是整数类型,则执行按位异或运算。 |
~ | ~x | 如果 x 是整数类型,则执行按位非操作(反转每个位)。 |
&
&表示按位运算符中的 AND 运算,AND运算(逻辑积)是一种当要运算的两个位都为1时返回1的运算方法。
& 运算符比较两个整数的每个二进制数字,如果都为 1,则返回 1,否则返回 0。
这类似于带有布尔值的 && 运算符,当两个布尔值都为真时,&& 操作的结果为真。
x | y | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
二进制1000(十进制8)与二进制1010(十进制10)AND运算为二进制1000(十进制8)。
代码演示:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/6 18:12
* @description:
*/
public class Eleven {
public static void main(String[] args) {
int x = 8;
int y = 10;
System.out.println("x & y的值为" + (x & y));
}
}
执行结果:
|
|
表示位运算中的或运算,OR运算(逻辑和)是当要运算的位之一为1时返回1的运算方法。
| 运算符比较两个整数的每个二进制数字,如果其中一个为 1,则返回 1。
这类似于 || 与布尔值一起使用的逻辑运算符,当比较两个布尔值时,如果其中一个为真,则结果为真,同样,当其中一个为 1 时,输出为 1。
x | y | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
二进制1000(十进制8)与二进制1010(十进制10)的OR运算为二进制1010(十进制10)。
代码演示:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/6 18:14
* @description:
*/
public class Twelve {
public static void main(String[] args) {
int x = 8;
int y = 10;
System.out.println("x | y的值为" + (x | y));
}
}
执行结果:
^
^
表示位运算中的异或运算,异或运算(异或)是当要运算的位不同时返回1的运算方法。
XOR 运算符比较两个整数的每个二进制数字,如果比较的两个位不同则返回 1。这意味着如果两个整数的位都是 1 或 0,则结果将为 0;否则 否则,结果将为 1。
x | y | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
二进制1000(十进制8)与二进制1010(十进制10)异或运算得到二进制0010(十进制2)。
代码演示:
package com.test.javaroads.operator;
/**
* @author: wangrui
* @date: 2022/12/6 18:16
* @description:
*/
public class Thirteen {
public static void main(String[] args) {
int x = 8;
int y = 10;
System.out.println("x ^ y的值为" + (x ^ y));
}
}
执行结果:
~
~表示位操作中的 NOT 操作,NOT运算是一种将运算中的每一位取反的运算方法。
~运算符更改整数的每个二进制位,这意味着所有 0 变为 1,所有 1 变为 0,运算符对布尔值的工作方式类似:它将布尔值从true反转 为false,反之亦然。
二进制 00001000(十进制 8)的 NOT 是 11110111(十进制 -9)。
代码演示:
package com.test.javaroads.operator;
/**
* @author: javaroads
* @date: 2022/12/6 18:16
* @description:
*/
public class Thirteen {
public static void main(String[] args) {
int x = 8;
System.out.println("~x的值为" + (~x));
}
}
执行结果:
- 点赞
- 收藏
- 关注作者
评论(0)