gpt4 book ai didi

Java 的短跨度为 -32768 (=0x8000),但为什么我们必须显式地将 0x8000 转换为短呢?

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

根据以下信息,

enter image description here

enter image description here

我们知道 Java 的 short 范围是从 -32768 (=0x8000)32767 (=0x7FFF) 并且转换是可选的。我不明白的是,为什么我们必须将 0x8000 转换为 short 显式

public static void main(String[] args)
{
short x;
x = (short) 0x8000;
// x = 0x8000; // have to cast 0x8000 to short
System.out.println(x);
}

我在 Windows 上使用 NetBeans。

最佳答案

0x8000 首先被解释为值为 32768 的整数,然后 Java 尝试将其转换为短整型,但它无法执行此操作,因为 32768 不适合短裤。

请注意,仅使用 32768 也能得到相同的结果:

short x = (short)32768;
System.out.println(x); // -32768

再举一个例子,考虑这行代码:

short x = 0xffff8000;
System.out.println(x); // -32768

这里不需要强制转换,因为0xffff8000是整数-32768,并且适合short。

但不要问我为什么他们决定让事情以这种方式工作(这可能只是为了让编译器保持简单)。

<小时/>

我在 JLS 中找到的唯一适用的摘录来自 5.2. Assignment Contexts : ( 3.10.1. Integer Literals 也相关)(但我肯定会错过相关部分)

In addition, if the expression is a constant expression (§15.28) of type byte, short, char, or int:

  • A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable

尽管在我看来,这确实对这里的预期行为留下了一些含糊之处。

关于Java 的短跨度为 -32768 (=0x8000),但为什么我们必须显式地将 0x8000 转换为短呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340105/

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