当我直接分配vlanid=0x960
。(十六进制值)时,它的效果非常好。但是当我为同样的目的使用java函数时,它被存储为十进制值。我在这里附上了代码。
int vlanid,
short vlanid1;
vlanid= (int) jSpinner1.getModel().getValue();
vlanid1 = Short.parseShort(((Integer.toHexString(vlanid))),16);
答案 0 :(得分:3)
您似乎并不理解评论中给出的信息,因此这里有一个示例向您展示它最初是否存储为“十进制”或“十六进制”无关紧要
short short1 = 0x10;
short short2 = 16;
short short3 = (short) (short1 + short2);
System.out.println("Short1: " + short1 + ", " + Integer.toHexString(short1));
System.out.println("Short2: " + short2 + ", " + Integer.toHexString(short2));
System.out.println("Short3: " + short3 + ", " + Integer.toHexString(short3));
输出:
Short1: 16, 10
Short2: 16, 10
Short3: 32, 20
修改强>
在回复您的评论时,我添加了一个使用两种不同方法从int
转到short
的示例。你似乎被抓住的是int should be in hexadecimal value
;这不是值的存储方式(无论是int,short,long等都无关紧要)。 所有这些类型都在内部存储为二进制补码整数(See this post)。因此,在下面的示例中,int1
和int2
代表相同的值
int int1 = 0x01b213d4; // Stored as: 1101100100001001111010100
int int2 = 28447700; // Stored as: 1101100100001001111010100
short short1Cast = (short) int1;
short short1Mask = (short) (int1 & 0xFFFF);
short short2Cast = (short) int2;
short short2Mask = (short) (int2 & 0xFFFF);
System.out.println("Int1: " + int1 + ", " + Integer.toHexString(int1) + ", " + short1Cast + ", " + short1Mask);
System.out.println("Int2: " + int2 + ", " + Integer.toHexString(int2) + ", " + short2Cast + ", " + short2Mask);
输出:
Int1: 28447700, 1b213d4 | Short1: 5076, 5076
Int2: 28447700, 1b213d4 | Short2: 5076, 5076
我在这里保留了cast方法和mask方法,因为你明确地引用了屏蔽整数值。除非您必须使用位屏蔽做一些特殊操作,否则我强烈建议使用更简单的强制转换方法,因为输出值没有功能差异。
答案 1 :(得分:0)
该数字始终存储为二补码二进制。但是,当您显示此数字时,通常会看到Short.toString(short)的结果,默认情况下会生成小数。
您描述数字的格式并不重要,也不存储。只有值很重要,这可以显示为十进制(默认值)或您希望从基数2到基数36的任何其他基数。