java-为什么0x000F存储为未签名?
我在阅读示例,试图理解如何将有符号字节转换为无符号整数计数器部分 我遇到的最流行的方法是:java-为什么0x000F存储为未签名?,java,unsigned,Java,Unsigned,我在阅读示例,试图理解如何将有符号字节转换为无符号整数计数器部分 我遇到的最流行的方法是: a & 0xFF 其中a是有符号字节 我的问题是为什么0xFF存储为未签名?是否所有十六进制值都存储为无符号?如果是,为什么 “And”-ing如何关闭符号整数中的符号位 如果有人能一步一步地分解这个过程,那就太好了。您可能在将字节转换为整数的代码中看到了这一点,他们希望将字节视为0-255范围内的无符号值。它一般不适用于整数。如果要将整数设为“无符号”,可以执行以下操作: int unsign
a & 0xFF
其中a
是有符号字节
我的问题是为什么0xFF存储为未签名?是否所有十六进制值都存储为无符号?如果是,为什么
“And”-ing如何关闭符号整数中的符号位
如果有人能一步一步地分解这个过程,那就太好了。您可能在将字节转换为整数的代码中看到了这一点,他们希望将字节视为0-255范围内的无符号值。它一般不适用于整数。如果要将整数
设为
“无符号”,可以执行以下操作:
int unsignedA = a & 0x7FFFFFFF;
这将确保unsignedA
为正数-但它是通过截断高位来实现的,因此,例如,如果a
为-1,则unsignedA为整数。最大值
无法将32位有符号Java整数转换为32位无符号Java整数,因为Java中没有32位无符号整数的数据类型。Java中唯一的无符号整数数据类型是16位长:char
如果要在Java中存储32位无符号整数值,则需要将其存储在long
:
long unsignedA = a & 0xFFFFFFFFL;
您可能在将字节转换为整数的代码中看到了这一点,他们希望将字节视为0-255范围内的无符号值。它一般不适用于整数。如果要将整数
设为
“无符号”,可以执行以下操作:
int unsignedA = a & 0x7FFFFFFF;
这将确保unsignedA
为正数-但它是通过截断高位来实现的,因此,例如,如果a
为-1,则unsignedA为整数。最大值
无法将32位有符号Java整数转换为32位无符号Java整数,因为Java中没有32位无符号整数的数据类型。Java中唯一的无符号整数数据类型是16位长:char
如果要在Java中存储32位无符号整数值,则需要将其存储在long
:
long unsignedA = a & 0xFFFFFFFFL;
在Java中,文本(1、0x2A等)是正数,除非您明确指出它们是负数。这是我们凭直觉写数字的方式
上一个问题回答了有关转换为无符号的问题 在Java中,文本(1、0x2A等)是正数,除非您明确指出它们是负数。这是我们凭直觉写数字的方式
上一个问题回答了有关转换为无符号的问题 详细说明Erwin关于将字节转换为整数的回答:在Java中,
byte
是有符号整数类型。这意味着它的值在-128到127之间。如果你说:
byte a;
int b;
a = -64;
b = a;
语言将保留价值;也就是说,它将b
设置为-64
但是,如果您真的想将字节转换为0到255之间的值(我猜您称之为字节值的“无符号对应项”),可以使用a&0xFF
。下面是发生的情况:
Java不直接对字节
或short
类型进行算术运算。因此,当它看到a&0xFF
时,它将两边都转换为int
。a
的十六进制值是一个字节,如下所示
a = C0
当它转换为32位整数时,值(-64)必须保留,因此这意味着32位整数的上24位中必须有1位。因此:
a = C0
(int)a = FFFFFFC0
但是你用0xFF
“和”它:
a = C0
(int)a = FFFFFFC0
& 000000FF
--------
a & FF = 000000C0
结果是一个介于0到255之间的整数。详细说明Erwin关于将字节转换为整数的答案:在Java中,
byte
是有符号整数类型。这意味着它的值在-128到127之间。如果你说:
byte a;
int b;
a = -64;
b = a;
语言将保留价值;也就是说,它将b
设置为-64
但是,如果您真的想将字节转换为0到255之间的值(我猜您称之为字节值的“无符号对应项”),可以使用a&0xFF
。下面是发生的情况:
Java不直接对字节
或short
类型进行算术运算。因此,当它看到a&0xFF
时,它将两边都转换为int
。a
的十六进制值是一个字节,如下所示
a = C0
当它转换为32位整数时,值(-64)必须保留,因此这意味着32位整数的上24位中必须有1位。因此:
a = C0
(int)a = FFFFFFC0
但是你用0xFF
“和”它:
a = C0
(int)a = FFFFFFC0
& 000000FF
--------
a & FF = 000000C0
结果是一个介于0到255之间的整数。那么
a
的原始数据类型是int
?你从哪里学会这个方法的?它将12345(一个非常精细的非负int
)转换成57。这就是您想要的吗?0xFF
是有符号整数。它恰好是非负的。所以a
的原始数据类型是int
?你从哪里学会这个方法的?它将12345(一个非常精细的非负int
)转换成57。这就是您想要的吗?0xFF
是有符号整数。是的,你是对的,我已经编辑了我的问题。从这个回答中我更明白了。是的,你是对的,我已经编辑了我的问题。从这个回答中我更明白了。