gpt4 book ai didi

java - 为什么下面的按位运算会产生数值溢出?

转载 作者:行者123 更新时间:2023-12-01 07:46:12 25 4
gpt4 key购买 nike

我有以下相当简单的按位运算

final int mask = ((1 << 31) - 1);

但是,我真的不明白为什么,Android Studio (IntelliJ) IDE 会给我 Numeric Overflow 警告

enter image description here

<小时/>

我在桌面上进行了快速运行

public static void main(String[] args) {
final int mask = ((1 << 31) - 1);
System.out.println(mask); // 2147483647
System.out.println(Integer.MAX_VALUE); // 2147483647
}

我觉得还不错。但是,我很困惑,为什么IDE会给我这样的警告?

最佳答案

这似乎是 IntelliJ 2018.1 中的问题。这是解释,

IDEA-182699 Numeric overflow: add an option to ignore if left bitwise shift result makes number negative - Its question

<小时/>

编译器将 1 获取为 int。又怎么样?

final int mask = (int)((1L << 31) - 1);

从数学上来说,

  1000 0000 0000 0000 0000 0000 0000 0000    (1 << 31)
1111 1111 1111 1111 1111 1111 1111 1111 (-1)
-----------------------------------------
1 0111 1111 1111 1111 1111 1111 1111 1111 +
^

0111 1111 1111 1111 1111 1111 1111 1111 (truncate)

关于java - 为什么下面的按位运算会产生数值溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com