繁体   English   中英

(Java)将负的short的比特放入整数

[英](Java) Put negative short's bits to an interger

我想在32位整数的尾部放入一个短整数(16位)(我正在将一些小范围的数字压缩为唯一的整数)。 但是没有找到比波纹管更好的方法,我必须使用两次操作,会更好吗?

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中的所有按位运算都是使用int或longs完成的,因此您在这里没有太多选择。 并将其符号位已设置的较短的原始类型转换为将符号位“扩展”为所有“较新创建的”位。

有一种解决方案可以“一行”地完成,但是那仍然是两个操作:

zip |= (sh & 0xffff);

请注意,它几乎要求zip开头为0,或者至少它的16个低位为0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM