JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

十四、Java运算符-逻辑运算符与位运算符

wys521 2024-11-04 15:39:04 精选教程 22 ℃ 0 评论

逻辑运算符

符号

说明

描述

&&

逻辑与

当且仅当两个操作数都为真,值才为真

||

逻辑或

当且仅当两个操作数都为假,值才为假

逻辑非

取反,如果条件为true,则逻辑非运算符将得到false。

示例:

/**
 * LogicalOperatorsExample
 * @author chewing
 */
public class LogicalOperatorsExample {
    public static void main(String[] args) {
        // 定义两个布尔变量
        boolean isRaining = true;
        boolean haveUmbrella = false;

        // 逻辑与(&&)
        boolean canGoOutside = isRaining && haveUmbrella;
        System.out.println("Can go outside without getting wet? " + canGoOutside); // 输出:false,因为没有雨伞

        // 短路逻辑与
        boolean willNotGetWet = !isRaining || haveUmbrella;
        System.out.println("Will not get wet going outside? " + willNotGetWet); // 输出:true,因为虽然没有雨伞,但是天没下雨

        // 逻辑或(||)
        boolean canStayDry = haveUmbrella || !isRaining;
        System.out.println("Can stay dry somehow? " + canStayDry); // 输出:true,因为或者有雨伞,或者天没下雨

        // 逻辑非(!)
        boolean isNotSunny = !isRaining;
        System.out.println("Is it not raining? " + isNotSunny); // 输出:false,因为正在下雨

        // 逻辑与和逻辑或结合
        int age = 25;
        boolean hasIDCard = true;
        boolean isWithParent = false;
        boolean canAttendParty = (age >= 18 && hasIDCard) || isWithParent; // 假设存在age, hasIDCard, isWithParent变量代表年龄是否大于等于18岁、是否有身份证以及是否由家长陪同
        System.out.println("Can attend the party? " + canAttendParty);
    }
}

结果:

Can go outside without getting wet? false
Will not get wet going outside? false
Can stay dry somehow? false
Is it not raining? false
Can attend the party? True

位运算符

位运算符是直接对整数类型(byte, short, int, long, char)的二进制位进行操作

符号

说明

描述

&

按位与

对于每一对位,只有当两个操作数中相应的位都为1时,结果位才为1,否则为0。

|

按位或

对于每一对位,如果两个操作数中相应的位有一个为1,那么结果位就为1,否则为0。

^

按位异或

对于每一对位,如果两个操作数中相应的位不同,那么结果位就为1,否则为0。

~

按位非

一元运算符,翻转操作数的每一位

<<

左移

将操作数的所有位向左移动指定的位数,右侧用0填充。

>>

带符号右移

将操作数的所有位向右移动指定的位数,左侧用符号位填充(正数填充0,负数填充1)。

>>>

无符号右移

将操作数的所有位向右移动指定的位数,左侧总是用0填充,无论符号位是什么。

示例:

/**
 * 位运算符案例
 * @author chewing
 * @time 2023-09-06
 */
public class BitwiseOperatorsExample {
    public static void main(String[] args) {
        // 定义两个整数
        int target = 10; // 十进制:10,二进制:1010
        int factorial  = 5;  // 十进制:5,  二进制:0101

        // 按位与 (&)
        int bitwiseAndResult = target & factorial;
        System.out.println("Bitwise AND of " + target + " and " + factorial + " is: " + bitwiseAndResult); // 输出:0,因为1010 & 0101 = 0000

        // 按位或 (|)
        int bitwiseOrResult = target | factorial;
        System.out.println("Bitwise OR of " + target + " and " + factorial + " is: " + bitwiseOrResult); // 输出:15,因为1010 | 0101 = 1111

        // 按位异或 (^)
        int bitwiseXorResult = target ^ factorial;
        System.out.println("Bitwise XOR of " + target + " and " + factorial + " is: " + bitwiseXorResult); // 输出:15,因为1010 ^ 0101 = 1111

        // 左移运算符 (<<)
        int leftShiftResult = target << 1;
        System.out.println(target + " shifted left by 1 bit is: " + leftShiftResult); // 输出:20,因为1010 << 1 = 10100

        // 右移运算符 (>>)
        int rightShiftResult = target >> 1;
        System.out.println(target + " shifted right by 1 bit is: " + rightShiftResult); // 输出:5,因为1010 >> 1 = 010

        // 无符号右移运算符 (>>>)
        int unsignedRightShiftResult = -10 >>> 1; // 对负数使用无符号右移
        System.out.println("-10 shifted right (unsigned) by 1 bit is: " + unsignedRightShiftResult); // 输出:2147483643,因为11111111111111111111111111110110 >>> 1

        // 按位取反 (~)
        int bitwiseNotResult = ~target;
        System.out.println("Bitwise NOT of " + target + " is: " + bitwiseNotResult); // 输出:-11,因为~1010 = 11111111111111101111
        // 注意:Java中int类型的按位取反结果需要与int的最大值进行加1运算才能得到十进制表示的实际负数结果
    }
}

结果:

Bitwise AND of 10 and 5 is: 0
Bitwise OR of 10 and 5 is: 15
Bitwise XOR of 10 and 5 is: 15
10 shifted left by 1 bit is: 20
10 shifted right by 1 bit is: 5
-10 shifted right (unsigned) by 1 bit is: 2147483643
Bitwise NOT of 10 is: -11

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表