《Java基础》运算符

本文详细介绍了Java中的算术、赋值、比较、逻辑和位运算符,通过实例演示了它们在数值处理中的作用,包括加减乘除、位与、位或、异或、非运算,以及左移、右移等操作,帮助读者理解并掌握这些核心概念在编程中的实际运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 算术运算符

运算符描述
+加法
-减法
*乘法
/除法
%

2 赋值运算符

运算符描述
=
+=
-=
*=
/=
%=
++
&=位与
|=位或
^=位非
>>=向右移位
<<=向左移位
        //>>=
        int a1 = 12;
        //a1 >>=2 --> a1 = a1 >> 2
        //1100 --> 0011 = 3
        a1 >>= 2;
        System.out.println(a1);//3
        
        //<<=
        int a2 = 5;
        //a2 <<= 2 --> a2 = a2 >> 2
        //0101 --> 10100 = 20
        a2 <<= 2;
        System.out.println(a2);//20
        
        //&=
        int b1 = 10;
        //b1 &= 5 --> b1 = b1 & 5
        //1010 & 0101 = 0000 = 0
        b1 &= 5;
        System.out.println(b1);//0
        
        //|=
        int b2 = 10;
        //b2 |= 5 --> b2 = b2 | 5
        //1010 | 0101 = 1111 = 15
        b2 |= 5;
        System.out.println(b2);//15
        
        //^=
        int b3 = 10;
        // b3 ^= 6 --> b3 = b3 ^ 6
        // 1010 ^ 0110 = 1100 = 12
        b3 ^= 6;
        System.out.println(b3);//12

3 比较运算符

运算符描述
==等于
>大于
<小于
>=大于等于
<=小于等于
!=不等于

4 逻辑运算符

运算符描述
&&短路与
||短路或
!
&逻辑与
|逻辑或

5 位运算符

运算符描述
<<左移
>>右移
>>>无符号右移
|
&
^异或
~

1) 与 &

当相同的位上均为1时结果为1,否则结 果为0

        //练习1:
        // 12 --> 1100
        // 5  --> 0101
        // 1100 & 0101 = 0100 = 4
        System.out.println(12 & 5);//
        
        //练习2:
        // 7  --> 0111
        // 9  --> 1001
        // 0111 & 1001 = 0001 = 1
        System.out.println(7 & 9);//1

2) 或 |

当两边操作数的位有一边为1时,结果为1,否则为0

       //练习1:
        //7 --> 0111
        //9 --> 1001
        //0111 | 1001 = 1111 = 15
        System.out.println(7 | 9);//15
        
        //练习2:
        //4 --> 0100
        //8 --> 1000
        //0100 | 1000 = 1100 = 12
        System.out.println(4 | 8);//12

3) 异或 ^

两边的位不同时,结果为1,否则为0

       //练习1:
        // 12 --> 1100
        // 5  --> 0101
        // 1100 ^ 0101 = 1001 = 9
        System.out.println(12 ^ 5);//9
        
        //练习2:
        // 8  --> 1000
        // 9  --> 1001
        // 1000 ^ 1001 = 0001 = 1
        System.out.println(8 ^ 9);//1

4) 非 ~

将数字补码取反 1变0 0变1

        //练习1:
        byte a = 10;
        //a 转换为二进制 00001010
        //因为是正数 原码 = 反码 = 补码
        //补码为00001010
        //补码通过非~进行取反
        //得到结果为 11110101
        //此数为补码 第1位为1 是负数
        //11110101(补码)  --> 11110100(反码) --> 10001011(原码)
        //10001011 = -11
        System.out.println(~a);//-11
        
        //练习2:
        //8默认为int类型 占用内存为4字节 = 32比特
        //转换为二进制为32位   0+23个0+00001000
        //因为是正数 原码 = 反码 = 补码
        //补码为 0+23个0+00001000
        //补码通过非~进行取反
        //得到结果为  1+23个1+11110111 
        //此数为补码 第1位为1 是负数
        //1+23个1+11110111 (补码)  转换成反码
        //1+23个1+11110110(反码)  转换成原码
        //1+23个0+00001001(原码)  = -9
        System.out.println(~8);//-9
        
        //练习3:
        short s = -7;
        //-7的二进制为 1 0000000 00000111(原码)
        //1 1111111  11111000(反码)
        //1 1111111  11111001(补码)
        //补码通过非~进行取反
        //0 0000000  00000110(补码)
        //因为是正数 原码 = 反码 = 补码
        //0 0000000  00000110(原码) = 6
        System.out.println(~s);//6

5) 左移/右移

左移<< 右移>>

在机器中,数的二进制都是其补码
正数:源码 = 反码 = 补码
负数: 反码符号位不变化,其余位数取反,补码即为反码+1
// 正数
System.out.println(5<<2);// 运行结果是20
System.out.println(5>>2);// 运算结果是1

// 负数
// 负数的左移和整数左移一样,在右边补0,负数左移不会特殊处理符号位,所以一个负数在左移的过程中会有正有负的情况,如果一直左移,会变成0
// 负数的右移需要保证数为负数,所以操作对负数的二进制位左边补1,如果一直右移,最终会变成-1,即 (-1) >> 1 是 -1
System.out.println(-5 << 2);// 运算结果 -20
// -5的二进制位  1111 1111 1111 1111 1111 1111 1111 1011 此为补码
// 右移两位变成   1111 1111 1111 1111 1111 1111 1111 1110
// 在变成原本的也就是-2
System.out.println(-5 >> 2);// 运算结果 -2

6) 无符号右移

注意: 没有无符号左移

无符号左移 <<< 无符号右移 >>>

无符号右移和右移的区别是:

负数进行无符号右移的时候前面补0

负数进行右移的时候,前面补1

// 结果1
System.out.println(5 >>> 2);
// 结果536870911
System.out.println(-5 >>> 3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为人师表好少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值