运算符

运算符:

  1. i++/++i

    1. i++(后缀递增)
      • 这种形式称为后缀递增,它首先返回 i 的原始值,然后 i 的值增加1。
      • i++ 表达式作为独立语句使用时,它只改变 i 的值,不返回任何值。
    2. ++i(前缀递增)
      • 这种形式称为前缀递增,它首先将 i 的值增加1,然后返回 i 的新值。
      • ++i 表达式作为独立语句使用时,它改变 i 的值,并返回 i 的新值。

    示例:

    复制代码
    java复制int i = 0;
    
    // 使用后缀递增
    int a = i++; // a = 0, i = 1
    System.out.println("a = " + a); // 输出 a = 0
    System.out.println("i = " + i); // 输出 i = 1
    
    // 再次使用后缀递增
    a = i++; // a = 1, i = 2
    System.out.println("a = " + a); // 输出 a = 1
    System.out.println("i = " + i); // 输出 i = 2
    
    // 使用前缀递增
    int b = ++i; // i = 3, b = 3
    System.out.println("b = " + b); // 输出 b = 3
    System.out.println("i = " + i); // 输出 i = 3
    

    注意:

    • 当递增运算符用于循环或条件语句中时,i++++i 的区别可能会影响程序的执行流程。例如,在 for 循环中,使用 i++++i 会导致循环体内部的执行次数不同。
    • 在表达式中,如果递增运算符的结果被使用,++i 会返回递增后的值,而 i++ 会返回递增前的值。
    • 在Java中,递增运算符是符合C语言风格的,而在某些其他编程语言中,可能没有这种区分。

    性能考虑:

    • 在某些情况下,编译器可能会优化这两种形式的递增运算符,使得它们在性能上没有区别。但是,从逻辑上讲,它们的行为是不同的。
  2. &与&&

    &(按位与)

    • & 是按位与运算符,它对两个整数的每一位进行与操作。
    • 它返回一个整数,其中每一位都是两个操作数对应位的与结果。
    • 按位与运算符通常用于位操作,而不是逻辑运算。

    示例

    复制代码
    javaint a = 0b1010; // 二进制的1010
    int b = 0b1100; // 二进制的1100
    int result = a & b; // 结果为0b1000
    System.out.println(Integer.toBinaryString(result)); // 输出1000
    

    &&(逻辑与)

    • && 是逻辑与运算符,它用于布尔逻辑运算。
    • 它对两个布尔表达式进行与操作,只有当两个操作数都为 true 时,结果才为 true;否则结果为 false
    • && 是短路运算符,如果第一个操作数为 false,则不会计算第二个操作数。

    示例

    复制代码
    javaboolean x = true;
    boolean y = false;
    
    boolean result1 = x && y; // 结果为false,因为y为false
    System.out.println(result1);
    
    boolean result2 = x && true; // 结果为true,因为x和第二个操作数都为true
    System.out.println(result2);
    

    区别和使用场景

    1. 使用 & 的场景
      • 当你需要对整数的二进制位进行操作时,使用 &
      • 例如,清除或设置特定的位,或者进行掩码操作。
    2. 使用 && 的场景
      • 当你需要在布尔逻辑中进行条件判断时,使用 &&
      • 例如,检查多个条件是否同时满足。

    短路特性

    • && 运算符的短路特性可以用于避免不必要的计算。如果第一个操作数为 false,则不会计算第二个操作数,因为整个表达式的结果已经确定为 false
    • 这种特性在处理可能抛出异常的表达式时特别有用,可以避免在第一个条件不满足时执行可能引发异常的操作。

    示例

    复制代码
    java复制boolean result3 = (x && y) && anotherCondition(); // 如果x为false,则不会调用anotherCondition()
    System.out.println(result3);
    
  3. |与||

    |(按位或)

    • | 是按位或运算符,它对两个整数的每一位进行或操作。
    • 它返回一个整数,其中每一位都是两个操作数对应位的或结果。
    • 按位或运算符通常用于位操作。

    示例

    复制代码
    javaint a = 0b1010; // 二进制的1010
    int b = 0b1100; // 二进制的1100
    int result = a | b; // 结果为0b1110
    System.out.println(Integer.toBinaryString(result)); // 输出1110
    

    ||(逻辑或)

    • || 是逻辑或运算符,它用于布尔逻辑运算。
    • 它对两个布尔表达式进行或操作,如果至少有一个操作数为 true,则结果为 true;否则结果为 false
    • || 是短路运算符,如果第一个操作数为 true,则不会计算第二个操作数。

    示例

    复制代码
    javaboolean x = true;
    boolean y = false;
    
    boolean result1 = x || y; // 结果为true,因为x为true
    System.out.println(result1);
    
    boolean result2 = false || y; // 结果为false,因为两个操作数都为false
    System.out.println(result2);
    

    区别和使用场景

    1. 使用 | 的场景
      • 当你需要对整数的二进制位进行操作时,使用 |
      • 例如,设置特定的位或进行掩码操作。
    2. 使用 || 的场景
      • 当你需要在布尔逻辑中进行条件判断时,使用 ||
      • 例如,检查多个条件中至少有一个是否满足。

    短路特性

    • || 运算符的短路特性可以用于避免不必要的计算。如果第一个操作数为 true,则不会计算第二个操作数,因为整个表达式的结果已经确定为 true
    • 这种特性在处理可能抛出异常的表达式时特别有用,可以避免在第一个条件满足时执行可能引发异常的操作。

    示例

    复制代码
    java复制boolean result3 = (x || y) || anotherCondition(); // 如果x为true,则不会调用anotherCondition()
    System.out.println(result3);
    
  4. >与>>

    >(大于运算符)

    • > 是一个比较运算符,用于比较两个数值的大小。
    • 如果左边的值大于右边的值,则结果为 true;否则结果为 false
    • 它通常用于条件语句和循环中,以决定程序的执行流程。

    示例

    复制代码
    javaint a = 10;
    int b = 20;
    
    boolean result = (a > b); // 结果为false
    System.out.println("Is a greater than b? " + result);
    

    >>(算术右移位运算符)

    • >> 是一个算术右移位运算符,它将操作数的各个位向右移动指定的位数。
    • 算术右移位意味着左边空出的位将被填充为符号位(即正数填充0,负数填充1)。
    • 这种操作符通常用于整数类型的位移操作,可以改变数值的大小。

    示例

    复制代码
    javaint a = 10; // 二进制为1010
    int result = a >> 1; // 右移一位,结果为5,二进制为101
    System.out.println("Result of arithmetic right shift: " + result);
    

    区别和使用场景

    1. 使用 > 的场景
      • 当你需要比较两个数值的大小时,使用 >
      • 例如,在排序算法中比较元素的顺序。
    2. 使用 >> 的场景
      • 当你需要对整数的二进制位进行位移操作时,使用 >>
      • 例如,通过位移操作来模拟除以2的操作。

    其他位移运算符

    • 逻辑右移位运算符 >>>:与算术右移位类似,但无论符号位是什么,左边空出的位总是填充为0。这在处理无符号整数时特别有用。

    示例

    复制代码
    java复制int a = -10; // 二进制为11111111111111111111111111110110
    int result = a >>> 1; // 逻辑右移一位,结果为-5,二进制为11111111111111111111111111110111
    System.out.println("Result of logical right shift: " + result);
    
posted @   墨澜  阅读(146)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示