Java 基于3个不同的整数创建唯一的整数
我想从坐标Java 基于3个不同的整数创建唯一的整数,java,hash,int,bit-manipulation,bit-shift,Java,Hash,Int,Bit Manipulation,Bit Shift,我想从坐标x、y和w在Java中创建一个名为hash的int x和y的值是有符号的,通常是负数 int的大小为32位 我想给w分配4位(如果最高有效位不可用,则分配3位),给x分配14位,给y分配14位 我尝试了以下方法,但我完全不明白为什么值会冲突:w+x这里唯一的问题是运算符优先级在之前,这里唯一的问题是运算符优先级在之前,您的问题是运算符优先级:+优先于您的问题是运算符优先级:+优先于共享您的代码。您遇到了什么问题?对于x和y,您始终可以使用%和/从单个整数中获取x/y。然而,当涉及到添加
x
、y
和w
在Java中创建一个名为hash
的int
x
和y
的值是有符号的,通常是负数
int
的大小为32位
我想给w
分配4位(如果最高有效位不可用,则分配3位),给x
分配14位,给y
分配14位
我尝试了以下方法,但我完全不明白为什么值会冲突:
w+x这里唯一的问题是运算符优先级在之前,这里唯一的问题是运算符优先级在之前,您的问题是运算符优先级:+
优先于您的问题是运算符优先级:+
优先于共享您的代码。您遇到了什么问题?对于x和y,您始终可以使用%和/从单个整数中获取x/y。然而,当涉及到添加另一个参数时,它会使事情变得混乱。最好的方法是将值存储在静态位置,然后使用代码解析和读取值。因此,对于2123124的w,x,y,你可以得到值0201230124,并使用代码来确定w包含02,x oo123和y 00124。@nicomp,这里唯一相关的代码是一行代码,我共享了它。@Anton,我不会比较慢很多吗?@Lolums比什么慢?如果要在一个字段中存储3个值,则必须将它们分开,以共享代码。您遇到了什么问题?对于x和y,您始终可以使用%和/从单个整数中获取x/y。然而,当涉及到添加另一个参数时,它会使事情变得混乱。最好的方法是将值存储在静态位置,然后使用代码解析和读取值。因此,对于2123124的w,x,y,你可以得到值0201230124,并使用代码来确定w包含02,x oo123和y 00124。@nicomp,这里唯一相关的代码是一行代码,我共享了它。@Anton,我不会比较慢很多吗?@Lolums比什么慢?如果你想在一个字段中存储3个值,你必须将它们分开,这真的很令人惊讶,我从来没有猜到。谢谢这真是令人惊讶,我永远也猜不到。谢谢
w + (x << 4) + (y << 18)
w + x << 4 + y << 18
((w + x) << (4 + y)) << 18
w + (x << 4) + (y << 18)
int hash = w << 28 | (x & 0x3FFF) << 14 | y & 0x3FFF;
11110000000000000011111111111111
w -^ X -^ Y -^