xzz2021
发布于 2024-02-06 / 4 阅读
0
0

java运算符学习归纳汇总

运算符主要分为: 算术运算符 关系运算符 逻辑运算符 位运算符 其他运算符

算术运算: 数字计算, 字符拼接

算术运算符含义样例解释
+z = x + y1+2=3
-z = x - y2-1=1
*z = x * y2*4=8
/z = x / y6/3=2
%取模z = x % y5%2=1
++递增x ++x+1
--递减x --x-1
+=相加并赋值z += xz = z+x
-=相减并赋值z -= xz = z-x
*=相乘并赋值z *= xz = z*x
/=相除法并赋值z /= xz = z/x
%=取模并赋值z %= xz = z%x
-取负数z = -xz = -x

上面++比较特殊:

let b = 2
console.log(++b+b++)  //  6

关系运算: 判断大小

关系运算符含义样例
==等于x == y
!=不等于x != y
>大于x > y
<小于x < y
>=大于等于x >= y
<=小于等于x <= y

逻辑运算: 比较两侧的布尔值,然后返回truefalse

逻辑运算符含义样例解释
&逻辑与x & y都为true返回true
|逻辑与x|y有一个true返回true,即使x为true,依然会执行y
^逻辑异或x ^ y两侧布尔值相同返回false,不同返回true
!逻辑非! x取反
||短路与x||y有一个true就直接返回true
&&短路与x && y有一个false就直接返回false

**上面需注意:比较时两侧必须是布尔值,否则会按位运算符进行运算,**短路运算只要前者达成就不再对后者进行判断

位运算: 将常量或变量,以二进制的方式,按位进行逻辑运算或移位计算,通常将0看为false,将1看为true

首先看下二进制1~10对应表

十进制二进制
11
210
311
4100
5101
6110
7111
81000
91001
101010

原码最高位为0, 正数的原码,反码,补码相同
反码是为了弥补对负数的处理,负数的反码是在原码基础上,符号位不变(最高位为1),其余数值取反;
然而反码中数字0会有2个,正0和负0, 所以需要补码, 对所有负数的反码进行+1操作, 从而合并正0和负0, 所以计算机的所有负数都是使用补码进行计算的
一个字节的表示范围是127~-128, -128是补码的特殊规定

十进制数字原码反码补码
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000
-11000 00011111 11101111 1111
-21000 00101111 11011111 1110
-31000 00111111 11001111 1101
-41000 01001111 10111111 1100
-51000 01011111 10101111 1011
-61000 01101111 10011111 1010
-71000 01111000 10001111 1001
-128无11000 0000

下表可能有误======解释稍后添加,涉及到移码,补码,原码,反码,后期补充

位运算符含义样例解释
~按位非~3(11)
&按位与z = x & y对应位都是1则为1,否则为0
|按位或z = x|y对应位都是0则为1,否则为0
^按位异或z = x ^ y对应位不同则为1,否则为0
>>左移z = x << 22<<3 = 16
>>右移z = x >> 22>> 3 = 0
>>>前补 0 右移z = x >>> 2

条件运算符: 在javascript里称作三元表达式

条件: 返回一: 返回二 // 当条件为真返回前者一,否则返回二

instanceof运算符: 类似javascript里的typeof variable == type

**字符串连接运算符: ** + , 和javascript一样,字符串和非字符进行拼接

运算符优先级:

单目运算符优先级高于多目运算符;算数运算符优先级高于关系运算符;关系运算符优先级高于逻辑运算符;逻辑运算符优先级高于赋值运算符。

案例列表:

// 类型转换 补位
public class learn2 {
    public static void main(String[] args) {
        //  byte a = 12;
        // a = a + 1; // 编译错误, 因为 a + 1 是 int 类型, 不能直接赋值给 byte 类型
        byte b = 12;
        int a = 0;
        a = a + b; // 正确, 因为 b 是 byte 类型, a + b 是 int 类型, 可以直接赋值给 int 类型
        // 内存空间小的 可以 自动补位
        System.out.println(a);
        byte c = 3;
		// c= c+ 3;  错误
        c += 3; // 正确, 因为 c += 3 相当于 c = (byte)(c + 3), 会自动进行类型转换; 但是值超出127的话会丢失精度
        System.out.println(c);
    }
}

参考文章: 运算符、表达式和语句


评论