You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java运算符优先级与移位运算:代码输出20的原因解析

解析Java代码x << 2-33的执行逻辑及输出结果

先看你给出的代码:

class HelloWorld {
    public static void main(String[] args) {
        int x =10;
        int a = x << 2-33;
        System.out.println(a);
    }
}

这段代码输出20的核心原因是Java运算符的优先级规则,以及移位操作的特殊处理逻辑,拆解如下:

  1. 运算符优先级决定表达式解析顺序
    减法(-)的优先级高于左移(<<),所以x << 2-33会被Java编译器解析为x << (2-33),而不是你可能误以为的(x << 2) - 33。

  2. 计算减法部分
    先执行2-33,结果为-31,此时表达式简化为x << -31。

  3. 移位位数的模运算处理
    Java中对int类型(32位有符号整数)进行移位操作时,移位的位数会先对32取模——因为移位超过32位对int类型来说没有意义。
    -31对32取模的计算过程:-31 = 32*(-1) + 1,所以结果为1,表达式进一步简化为x << 1。

  4. 执行左移操作
    x=10的二进制是1010,左移1位后变为10100,对应十进制的20,这就是最终输出的结果。

如果给x << 2加上括号,表达式变成(x << 2) -33,那就是先算左移得到40,再减33得到7,和当前逻辑完全不同。

内容的提问来源于stack exchange,提问作者NANDISHWAR RAGULA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:22:41