【回顾】java运算符

Java位运算实践

java运算符

java运算符相对还是比较简单的。

 

 

note:
1.java运算符除了单目运算符、赋值运算符、三目运算符从右向左结合,其他都是是从左向右结合的。

2.有些优先级不太好记,为了避免coding和review可能出现的错误,不确定的地方建议加上括号增加可读性。

 

左移运算实践

工作中会遇到这样的需求,某一个字段的不同位表示不同的含义,第1位表示xx,第2位表示yy,也就是用到所谓的“位”运算。这种场景下,我们就会用到左移运算。

 

这里给一个常用的vscode枚举。

public enum VsCodeBitDef {
    /**
     * 是否同意返利
     */
    XX(1),
    /**
     * 是否对聚划算交易额外出佣
     */
    YY(2);

    private VsCodeBitDef(int num) {
        this.num = num;
    }

    private int num;

    /**
     * 判断特定标记位是否设置
     * @param vsCode
     * @param vsCodeBitDef
     * @return
     */
    public static boolean isFlagSetted(int vsCode, VsCodeBitDef vsCodeBitDef) {
        vsCodeBitDef = Preconditions.checkNotNull(vsCodeBitDef);
        int shift = vsCodeBitDef.num - 1;
        return (vsCode & (1 << shift)) > 0;
    }

    /**
     * 设置某一位
     */
    public static int setFlag(int vsCode, VsCodeBitDef vsCodeBitDef, boolean on) {
        vsCodeBitDef = Preconditions.checkNotNull(vsCodeBitDef);
        int shift = vsCodeBitDef.num - 1;
        if (on) {
            vsCode |= (1 << shift);
        } else {
            vsCode &= ~(1 << shift);
        }
        return vsCode;
    }

}

 

 

<think>好的,我现在需要回答用户关于Java运算符的问题。首先,用户明确要求列出Java运算符的列表并详细解释,还希望了解它们的用法。根据用户提供的引用内容,我需要结合这些信息来构建一个结构清晰的回答。 首先,我需要回顾系统级指令,确保格式正确。例如,行内数学表达式要用$...$,独立公式用$$...$$,并且正确使用引用标识。不过在这个问题中,可能数学表达式不多,但要注意代码块的使用。用户提供的引用有三个,分别涉及运算符的分类、优先级和一些常见错误,比如连续使用关系运算符的问题。 接下来,我需要整理Java运算符的分类。根据引用[2],Java运算符分为算术、关系、逻辑、位、移位、条件、赋值等。引用[1]详细列出了优先级顺序,这需要整合到分类中,可能作为单独的一部分说明优先级。引用[3]提到不能连续使用关系运算符,比如3<5<6会报错,这一点在解释关系运算符时需要强调。 然后,每个分类的运算符需要详细说明,包括符号、用法和示例。例如,算术运算符包括加减乘除等,关系运算符如<、>等,逻辑运算符如&&、||,需要注意短路行为。位运算符和移位运算符可能需要更详细的解释,尤其是对于新手来说。条件运算符(三元运算符)也是重点,需要举例说明。 在优先级部分,引用[1]给出了从高到低的顺序,但需要以更易读的方式呈现,比如分点列出,并指出常见的优先级问题,比如乘除先于加减,逻辑与优先级高于逻辑或等。同时,结合引用[3]提到的连续关系运算符的错误,可以在这里提醒读者注意运算符的优先级和结合顺序,避免此类错误。 另外,注意事项部分可以包括运算符的优先级陷阱、类型转换问题(比如整数除法)、短路逻辑运算符的优势,以及避免连续关系运算符的使用。这些点能帮助用户避免常见错误,提升代码质量。 最后,生成相关问题需要考虑用户可能的后续疑问,比如运算符优先级记忆方法、不同类型运算符的区别、常见错误及解决方法,以及实际应用中的使用场景。这些问题应覆盖用户可能想深入了解的方面。 现在需要确保回答结构清晰,分点明确,每个部分有示例代码或说明,并且正确引用提供的资料。例如,在关系运算符部分,引用[3]的例子必须提到,并在末尾添加引用标识。同时,检查是否有遗漏的运算符类型,确保覆盖所有用户提到的分类,可能还需要补充赋值运算符和instanceof运算符等细节。 在代码示例方面,要使用正确的Java语法,比如在逻辑运算符部分展示短路特性,用条件运算符的例子说明语法。同时,确保代码格式正确,使用反引号包裹代码块,并标明语言类型。 最后,通读整个回答,确保符合系统指令中的格式要求,没有使用任何Markdown,行内表达式正确,引用标识正确放置,并且语言流畅,结构合理。</think>### Java运算符分类及详解 #### 一、运算符分类及用法 1. **算术运算符** - `+`(加法)、`-`(减法)、`*`(乘法)、`/`(除法)、`%`(取模) - 示例: ```java int a = 10 + 5; // 15 double b = 10.0 / 3; // 3.333... int c = 10 % 3; // 1 ``` - 注意:整数除法会截断小数部分,如 `5 / 2 = 2`。 2. **关系运算符** - `>`(大于)、`<`(小于)、`>=`(大于等于)、`<=`(小于等于)、`==`(等于)、`!=`(不等于) - 返回布尔值 `true`/`false`,常用于条件判断: ```java boolean flag = (5 > 3); // true ``` - **禁止连续使用**:`3 < 5 < 6` 会导致编译错误,需拆分为 `(3 < 5) && (5 < 6)`[^3]。 3. **逻辑运算符** - `&&`(逻辑与)、`||`(逻辑或)、`!`(逻辑非) - 短路特性:若左操作数已确定结果,则右操作数不执行。 ```java boolean result = (false && (x > 0)); // 右侧不执行 ``` 4. **位运算符** - `&`(按位与)、`|`(按位或)、`^`(按位异或)、`~`(按位取反) - 示例: ```java int a = 5 & 3; // 0101 & 0011 = 0001 → 1 ``` 5. **移位运算符** - `<<`(左移)、`>>`(带符号右移)、`>>>`(无符号右移) - 示例: ```java int b = 8 >> 1; // 1000 → 0100 → 4 ``` 6. **条件运算符(三元运算符)** - `条件 ? 表达式1 : 表达式2` - 示例: ```java int max = (a > b) ? a : b; ``` 7. **赋值运算符** - `=`(赋值)、`+=`(加并赋值)、`-=`(减并赋值)等复合形式 - 示例: ```java a += 5; // 等价于 a = a + 5 ``` 8. **其他运算符** - `instanceof`(类型检查): ```java boolean isString = "Hello" instanceof String; // true ``` --- #### 二、运算符优先级(从高到低) 1. **后缀运算符**:`x++`、`x--` 2. **一元运算符**:`+`、`-`、`!`、`~`、`++x`、`--x` 3. **乘性运算符**:`*`、`/`、`%` 4. **加性运算符**:`+`、`-` 5. **移位运算符**:`<<`、`>>`、`>>>` 6. **关系运算符**:`<`、`>`、`<=`、`>=` 7. **相等性判断**:`==`、`!=` 8. **逻辑与/异或/或**:`&`、`^`、`|` 9. **短路逻辑运算符**:`&&`、`||` 10. **三元运算符**:`? :` 11. **赋值运算符**:`=`、`+=`等[^1]。 --- #### 三、注意事项 1. **优先级陷阱**:乘除优先于加减,逻辑与(`&&`)优先于逻辑或(`||`)。 2. **类型转换**:整数除法可能丢失精度,需显式转换为浮点类型。 3. **短路特性**:合理利用 `&&`、`||` 提升效率。 4. **连续关系运算符**:需拆分为逻辑表达式,如 `(a < b) && (b < c)`[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值