为啥我不能把 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