(Java) 将负的 short 位转为整数
(Java) Put negative short's bits to an interger
我想将一个短整数(16 位)放入一个 32 位整数的尾部(我正在将一些小范围的数字压缩为一个唯一的整数)。但是没有找到比下面更好看的方法,我必须使用两次操作,可以更好吗?
short sh = -1; // 16 bits 1
int zip = 0; // last 16 bits presents a short number
System.out.println("Wrong way, maybe many of us will try first:");
zip |= sh; // expect 0xffff
System.out.println(Integer.toHexString(zip)); // but 0xffffffff
System.out.println("Simple way, right but looks ugly, two operations");
zip = 0;
zip |= sh << 16 >>> 16; // expect 0xffff
System.out.println(Integer.toHexString(zip)); // yeah
System.out.println("Is there a nicer looking way, one operation for example?");
Java中的所有位运算都是使用整数或长整数完成的,因此您在这里没有太多选择;并转换一个设置了符号位的较短的原始类型会将 "expand" 符号位转换为所有 "newer created" 位。
有一个解决方案"in one line",但这仍然是两个操作:
zip |= (sh & 0xffff);
注意,它几乎要求 zip 是 0 开头,或者至少它的 16 个低位是 0。
我想将一个短整数(16 位)放入一个 32 位整数的尾部(我正在将一些小范围的数字压缩为一个唯一的整数)。但是没有找到比下面更好看的方法,我必须使用两次操作,可以更好吗?
short sh = -1; // 16 bits 1
int zip = 0; // last 16 bits presents a short number
System.out.println("Wrong way, maybe many of us will try first:");
zip |= sh; // expect 0xffff
System.out.println(Integer.toHexString(zip)); // but 0xffffffff
System.out.println("Simple way, right but looks ugly, two operations");
zip = 0;
zip |= sh << 16 >>> 16; // expect 0xffff
System.out.println(Integer.toHexString(zip)); // yeah
System.out.println("Is there a nicer looking way, one operation for example?");
Java中的所有位运算都是使用整数或长整数完成的,因此您在这里没有太多选择;并转换一个设置了符号位的较短的原始类型会将 "expand" 符号位转换为所有 "newer created" 位。
有一个解决方案"in one line",但这仍然是两个操作:
zip |= (sh & 0xffff);
注意,它几乎要求 zip 是 0 开头,或者至少它的 16 个低位是 0。