为啥我不能把 0xffff 放到 java 中的短

Posted

技术标签:

【中文标题】为啥我不能把 0xffff 放到 java 中的短【英文标题】: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 中, 但它不能,为什么?

【问题讨论】:

【参考方案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 位来存储我们的日期,谢谢大家的回答,谢谢!

【讨论】:

以上是关于为啥我不能把 0xffff 放到 java 中的短的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将文件从 Windows 中的 CD 拖放到 Eclipse / SWT Drop Target

为啥我不能将文件拖放到 Qt 示例拖放示例中?

为啥在java中不能导入awt包

为啥我的Androidstudio的butterKnife插件不能用?

为啥我安装了TOOLS不能拖放文件到虚拟机

java程序添上包就不能运行了,为啥?