今天在项目中看到一个两个变量互换值的写法,感觉很奇怪,代码是这样的:
int a = 3;
int b = 2;
a ^= b;
b ^= a;
a ^= b;
于是到网上查阅了相关资料,并写了自己的测试代码,同时对“&”,"|","^"运算符做了一些总结:
这几个运算符都涉及到二进制间的逻辑运算,为了便于理解,在二进制里,我们可以把1当做逻辑true,把0当做逻辑false。
测试代码如下:
package test;
public class Test {
public static void main(String[] args) {
int a = 3;
int b = 2;
test1(a, b);
test2(a, b);
test3(a, b);
test4(a);
}
public static void test1(int a, int b) {
System.out.println("a & b = " + (a & b));
}
public static void test2(int a, int b) {
System.out.println("a | b = " + (a | b));
}
public static void test3(int a, int b) {
System.out.println("a ^ b = " + (a ^ b));
}
public static void test4(int a){
System.out.println("~a = " + (~a));
}
}
1、“&”按位与运算符:
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为1,则运算结果为1,否则为0,因为任何数与0都得0。
例子中的计算过程:
3的二进制形式为0000 0000 0000 0000 0000 0000 0000 0011
2的二进制形式为0000 0000 0000 0000 0000 0000 0000 0010
按位进行与运算,结果为0000 0000 0000 0000 0000 0000 0000 0010
这个数字转换为十进制就是数字2.
2、“|”按位或运算符:
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为1则为1,否则为0,1和任何数或运算都是1。
例子中的计算过程:
3的二进制形式为0000 0000 0000 0000 0000 0000 0000 0011
2的二进制形式为0000 0000 0000 0000 0000 0000 0000 0010
按位进行或运算,结果为0000 0000 0000 0000 0000 0000 0000 0011
这个数字转换为十进制就是数字3.
3、“^”按位异或运算符:
运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为1。
例子中的计算过程: 3的二进制形式为0000 0000 0000 0000 0000 0000 0000 0011
2的二进制形式为0000 0000 0000 0000 0000 0000 0000 0010
按位进行或运算,结果为0000 0000 0000 0000 0000 0000 0000 0001
这个数字转换为十进制就是数字1.
4、“~”按位非运算:
按位非也叫做补,其实就是对二进制 先取反,再取反+1并添加上符号,就可以得到结果。
运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1。
适用场合:反转数字的内容
例子中的计算过程:
3的二进制形式为0000 0000 0000 0000 0000 0000 0000 0011 取反后:1111 1111 1111 1111 1111 1111 1111 1100
由于取反后得到的是一个负数的存贮形式,而负数时以补码的形式存贮,所以补码取反加1,转为十进制,再添加上符号就得到十进制形式的值。
即:
取反加1后的结果:0000 0000 0000 0000 0000 0000 0000 0011 + 1 = 0000 0000 0000 0000 0000 0000 0000 0100
转为成十进制并添加上符号,即最后的结果为:-4
所以,例子程序中最后的执行结果为:
a & b = 2
a | b = 3
a ^ b = 1
~a = -4
分享到:
相关推荐
Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java中的运算符Java...
在本文中,我们将详细介绍 Java 运算符的优先级和常见的异常类型,以及它们的解决方法。 一、Java 运算符优先级 Java 中的运算符可以分为以下几种: * 算术运算符:+、-、*、/、%、++ * 比较运算符:==、!=、<、>...
Java中的运算符用于执行特定的数学或逻辑操作。它们可以分为多种类型,如算术运算符(+,-,*,/,%),关系运算符(==,!=,<,>,,>=),逻辑运算符(&&,||,!),位运算符(&,|,^,~,,>>,>>>)以及赋值...
总之,`|=`, `&=` 和 `^=` 是Java中用于按位操作的复合赋值运算符,它们分别对变量的二进制表示进行或、与和异或运算,并将结果赋回给变量本身。理解这些运算符的原理和用法是提升Java编程技能的关键步骤。
了解并熟练运用Java中的变量、数据类型和运算符是编写高效代码的基础,而面向对象编程则让代码结构更加清晰,易于维护和扩展。在实际编程中,开发者需要根据需求选择合适的数据类型,合理使用运算符,以及设计符合...
在JAVA语言中,变量是存储数据的容器,数据类型决定了变量可以存储的数据类型和范围。JAVA语言中有八种基本数据类型:布尔型(boolean)、字节型(byte)、字符型(char)、短整型(short)、整型(int)、长整型...
Java 语言中有两种类型的逻辑运算符:短路运算符和非短路运算符。短路运算符包括“&&”和“||”,它们在逻辑表达式中使用,具有短路特性,即如果第一个表达式的结果已经确定了整个表达式的结果,那么就不再执行后续...
本章主要讲解了 Java 语言中的运算符、表达式和语句,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、条件运算符和 instanceof 运算符等,以及语句的概述、分支语句、循环语句和跳转语句等。...
Java语言中的表达式是指一个或多个操作数和运算符组合的结果。表达式可以是简单的,如(int a = 2,b = 3,c;c = a / b * 8;),也可以是复杂的,如(double a = 3.0, k;int b = 3, c = 2;k = a / c + b / c;)。 五...
在Java编程语言中,逻辑运算符`&&`、`&`、`||`以及`|`有着不同的用法和特点。这些运算符主要用于布尔逻辑表达式,但也有一些特殊情况适用于整数类型的位操作。以下是它们之间的详细区别: 1. **逻辑运算符**: - `...
Java 中的运算符 Java 中的运算符是指在 Java 语言中用于执行操作的符号。这些符号可以分为七类:算术运算符、关系运算符、位运算符、逻辑运算符、移位运算符、三元运算符和赋值运算符。 一、算术运算符 算术...
Java语言中的自增运算符(++)和自减运算符(--)是两个非常基础且独特的运算符,它们在编程中用于递增或递减变量的值。这两个运算符源自C语言,且Java语言中也使用了这两个运算符,并保留了它们的主要特性,但也有一些...
在“java课件1-2章25个例题Java语言概述、基本数据类型、运算符与表达式”中,我们将深入探讨Java语言的基础知识,包括语言概述、基本数据类型以及运算符与表达式。 首先,Java语言概述是理解任何编程语言的起点。...
在Java编程语言中,`&`和`&&`都是逻辑运算符,但它们在实际使用中存在一些重要的差异。理解这些差异对于编写高效且清晰的代码至关重要。 首先,两者都用于进行逻辑运算,评估左右两边的布尔表达式,并根据结果返回...
28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符...
逻辑运算符是 Java 编程语言中的一种基本运算符,用于判断两个或多个布尔值的逻辑关系。逻辑运算符可以分为两大类:短路逻辑运算符和非短路逻辑运算符。 一、短路逻辑运算符 短路逻辑运算符包括 && 和 || 两个...
在Java编程语言中,运算符、表达式与语句是构建程序的基础元素,它们构成了代码的基本逻辑。在《第3章:Java基础程序设计》中,我们深入探讨了这些核心概念,以帮助初学者理解如何有效地编写Java程序。 首先,我们...
本资料包"java学习-java的运算符"是针对Java运算符的学习资源,旨在帮助你深入理解和熟练运用Java中的各种运算符。 1. **算术运算符**:Java中的算术运算符包括加法(+)、减法(-)、乘法(*)、除法(/)和取余...
主要介绍了Java中&&与&,||与|的区别的相关资料,需要的朋友可以参考下
Java是一种广泛使用的面向对象的编程语言,其语法严谨且...在“java数据类型和运算符共3页.pdf”中,你将找到更深入的讲解,包括它们的使用场景、注意事项以及示例代码,这将有助于你进一步理解和掌握这些核心概念。