【问题标题】:why can't I put the 0xffff in to a short in java为什么我不能把 0xffff 放到 java 中的短
【发布时间】:2017-03-16 10:18:48
【问题描述】:

比如标题,我记得short是一个16位的值,而每个十六进制字符都是一个4位的值,所以我想0xffff 可以放在 short 中, 但它不能,为什么?

【问题讨论】:

    标签: java hex short


    【解决方案1】:

    在 Java 中 short 是一个 signed 数据类型。因此,设置了所有位的值是-1。我怀疑这就是你希望他所重视的......

    【讨论】:

      【解决方案2】:

      此分配失败,因为 0xffff 是 int 文字:

      short s = 0xffff;
      

      您必须将其转换为 short 才能使其工作:

      short s = (short) 0xffff;
      

      请记住,short 是有符号类型,因此您可能无法获得您期望的值。十六进制的0xffff代表数字-1

      System.out.println((short) 0xffff); // Prints -1.
      

      【讨论】:

      • 但是将其转换为short会产生错误的值(溢出)。
      • 会的。虽然它是否错误取决于他的期望;)
      【解决方案3】:

      因为 0xffff 是 int 的格式,你需要将其转换为 short。

      short s= (short)0xffff;
      

      【讨论】:

      • 有时最好从 IDE 或编译器中读取错误消息,这样可以节省大量时间...
      • 不是真的......你可以有short s = 0xfff,一切都会好起来的!
      • 到 0x7fff 它不会在 IDE 中抱怨! ...因为这是可接受的最大值...
      • 所以? short s= (short)0xffff 的值是多少; ?
      • 二进制 (1111111111111111) 是十进制 (-1) 的 2 补码 ... 所以 -1 ... 解释 here
      【解决方案4】:

      我想我已经找到答案了,integer 是有符号的数据类型,还有一点可以用来放一个 Sign 位,所以虽然 short 有 8 位,但实际上我们可以用 7 位来存储我们的日期,谢谢大家的回答,谢谢!

      【讨论】:

        猜你喜欢
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 2022-11-12
        相关资源
        最近更新 更多