默认情况下,Java有带符号的数字,但您可以将它们用作无符号数字。
Java Primitive data types
.
-
:
byte
是一个8位有符号整数。如果要添加符号位,必须使用short。
-
uint16\u t
short
是一个16位有符号整数。如果要添加符号位,必须使用
int
.
-
uint32\u t
:
int
是32位有符号整数。但是,可以将其用作无符号整数。为此,你可能想调查一下
unsigned comparison methods etc.
-
:
long
我认为无论您使用的是有符号还是无符号的数据类型都与按位运算符一起使用。唯一的问题是在打印这些数字或将其转换为字符串时。为此,您可以使用
toUnsignedInteger
方法
Byte
和
Short
toUnsignedLong
Integer
.
对于逻辑部分:
您可以按C++实现位逻辑,但可以使用类型转换。请参阅
documentation
public class ClientData
{
private int pod_count;
private byte proc_id;
private short client_id;
private byte text;
public static void main (String[] args)
{
new ClientData().unpack(Long.decode("0x32112321321fdffa"));
}
void unpack(long client_data)
{
this.pod_count = (int)(client_data & 0xffffffff);
client_data = client_data >> 32;
this.proc_id = (byte) (client_data & 0xff);
client_data = client_data >> 8;
this.client_id = (short) (client_data & 0xffff);
client_data = client_data >> 16;
this.text = (byte) (client_data & 0xff);
}
}