Java不支持无符号数据类型。byte
,short
,int
和long
都是有符号数据类型。对于有符号数据类型,值范围的一半存储正数,一半用于负数,因为一个位用于存储有符号值的符号。
例如,一个字节需要8
位; 其范围是-128``到127
。如果只在一个字节中存储正数,则其范围将为0
到255
。
Java在包装器类中有一些静态方法,以支持处理带符号值中的位的操作,就像它们是无符号整数一样。
Byte
类包含两个静态方法:
int toUnsignedInt(byte x)
long toUnsignedLong(byte x)
Java
这些方法将指定的字节参数转换为int
和long
,就像该字节存储为无符号值一样。如果指定的字节为零或正,则转换的int
和long
值将相同。如果参数是负数,则转换的数字将为2^8 + x
。
例如,对于输入-10
,返回的值将是2^8 +(-10)
,也就是246
。负数以2
的补码形式存储。 值-10
将被存储为11110110
。最高有效位1
表示它是一个负数。
前7位(1110110
)的2
的补码是001010
,十进制为<