Java 将两条短裤组合成一个整数,处理负数和正数
我正在制作一个PackedUnsigned1616类,它在一个int中存储两个无符号的short,还有一个PackedSigned1616类,它在一个int中存储两个有符号的short。我已经阅读了按位运算的相关知识,但我仍然不清楚如何处理有符号和无符号以及比短范围大或小的值(它们作为两个int传入). 以下是到目前为止我得到的信息:Java 将两条短裤组合成一个整数,处理负数和正数,java,bit-manipulation,signed,bit-packing,Java,Bit Manipulation,Signed,Bit Packing,我正在制作一个PackedUnsigned1616类,它在一个int中存储两个无符号的short,还有一个PackedSigned1616类,它在一个int中存储两个有符号的short。我已经阅读了按位运算的相关知识,但我仍然不清楚如何处理有符号和无符号以及比短范围大或小的值(它们作为两个int传入). 以下是到目前为止我得到的信息: public final class PackedUnsigned1616 { public final int field; private static f
public final class PackedUnsigned1616 {
public final int field;
private static final int RIGHT = (2 << 15) - 1;
private static final int LEFT = ((2 << 31) - 1) ^ RIGHT;
public PackedUnsigned1616(int left, int right) {
field = (left << 15) | (right & RIGHT);
}
public int getLeft() {
return field >> 15;
}
public int getRight() {
return field & RIGHT;
}
public final class PackedUnsigned1616{
公共最终整型字段;
私有静态final int RIGHT=(2初始化左侧和右侧的有趣方法。请尝试以下方法:
public final class PackedUnsigned1616 {
public final int field;
private static final int RIGHT = 0xFFFF;
public PackedUnsigned1616(int left, int right) {
field = (left << 16) | (right & RIGHT);
}
public int getLeft() {
return field >>> 16; // >>> operator 0-fills from left
}
public int getRight() {
return field & RIGHT;
}
}
那么,您想要的行为是什么呢?您可以表示的最大短路是(2Oh,对不起,我希望它是为了好玩还是为了解决实际问题?这是用于粒子模拟器的。谢谢!但我该如何制作PackedSigned1616?@Ted-我在互联网上搜索了0xFFFF符号。这是十六进制吗?0x代表什么?此外,未签名版本的getLeft函数不起作用。我们e值(532767),它返回10和32727。对于(532766)和(527766)@cable729,同样的,0xFFFF
表示法是十六进制文字。它在中定义。至于代码不工作,我修复了代码中的一个错误(我通过复制您的代码继承了这个错误:-0)它由16变为15。确保您使用的是修订版。是的,我也发现了:)谢谢您的帮助!对于签名值,您可以返回一个short
public int getLeft() {
return field >> 16; // sign bit is significant
}
public int getRight() {
return (short) (field & RIGHT); gets cast back to signed int
}