Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-为什么0x000F存储为未签名?_Java_Unsigned - Fatal编程技术网

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
是有符号整数。是的,你是对的,我已经编辑了我的问题。从这个回答中我更明白了。是的,你是对的,我已经编辑了我的问题。从这个回答中我更明白了。