Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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,存储在大于127的字节中_Java_Casting_Byte - Fatal编程技术网

Java,存储在大于127的字节中

Java,存储在大于127的字节中,java,casting,byte,Java,Casting,Byte,对于一个赋值,我得到一些字节,对它们的二进制值进行一些计算,并且必须以字节数组的形式返回计算出的内容 我现在的问题是,这个字节最多只能存储127个,但我的值最多可以是2^8-1(11111)。我已经试着把它转换成十六进制,但它当然也不起作用 那么,这是可能的,如果是的话,是如何实现的,还是不可能的呢?通常,在Java中,这个数字将表示为int。这给了你足够的空间来存储你的价值观。如果您需要将其表示为字节,以便将其传输到某个地方或类似的地方,那么您可以像 int i = 255; byte b =

对于一个赋值,我得到一些字节,对它们的二进制值进行一些计算,并且必须以字节数组的形式返回计算出的内容

我现在的问题是,这个字节最多只能存储127个,但我的值最多可以是2^8-1(11111)。我已经试着把它转换成十六进制,但它当然也不起作用


那么,这是可能的,如果是的话,是如何实现的,还是不可能的呢?

通常,在Java中,这个数字将表示为
int
。这给了你足够的空间来存储你的价值观。如果您需要将其表示为字节,以便将其传输到某个地方或类似的地方,那么您可以像

int i = 255;
byte b = (byte) (i & 0xff);
但是在这种情况下,它仍然是负数,因为
byte
是用Java签名的


此外,十六进制文字默认为
int
,您可能已经发现了这一点。因此,
0xff
的值确实是您想要的255,但它是一个
int
,而不是一个
字节
,通常,在Java中,这个数字将表示为
int
。这给了你足够的空间来存储你的价值观。如果您需要将其表示为字节,以便将其传输到某个地方或类似的地方,那么您可以像

int i = 255;
byte b = (byte) (i & 0xff);
但是在这种情况下,它仍然是负数,因为
byte
是用Java签名的


此外,十六进制文字默认为
int
,您可能已经发现了这一点。因此,
0xff
的值确实是255,就像你想要的那样,但是它是一个
int
,而不是
字节
,如果我理解你的问题,在你进行任何计算之前,你需要对255和(&)你的字节进行比较,所以你将处理从0到255的值,而不是从-128到127的值。当您将大于127的值赋给一个字节时,它会溢出,因此在java中,128作为一个字节是-128,但是在您和(&)-128对255之后,您将得到+128

// This prints 0 to 127, then -128 to -1
public static void main(String[] args) {
    for (int i = 0; i <= 255; i++) {
        System.out.println(((byte)i));
    }
}

// Where this will print 0 to 255
public static void main(String[] args) {
    for (int i = 0; i <= 255; i++) {
        System.out.println(((byte)i) & 255);
    }
}
//这会将0打印到127,然后将-128打印到-1
公共静态void main(字符串[]args){

对于(int i=0;i如果我理解您的问题,在执行任何计算之前,您需要将字节与255进行比较,因此您将处理从0到255的值,而不是从-128到127的值。当您将大于127的值分配给一个字节时,它会溢出,因此java中作为字节的128是-128,但在您和(&)之后-128对255你会得到+128

// This prints 0 to 127, then -128 to -1
public static void main(String[] args) {
    for (int i = 0; i <= 255; i++) {
        System.out.println(((byte)i));
    }
}

// Where this will print 0 to 255
public static void main(String[] args) {
    for (int i = 0; i <= 255; i++) {
        System.out.println(((byte)i) & 255);
    }
}
//这会将0打印到127,然后将-128打印到-1
公共静态void main(字符串[]args){


对于(int i=0;我可以发布一些代码吗?这将非常有帮助:)如果结果需要2个字节,那么问题出在哪里?您不需要只返回一个字节数组吗?我不理解您的意思,因为您可以发布一些代码吗?这将非常有帮助:)如果你的结果需要2个字节,那有什么问题?你不需要只返回一个字节数组吗?我不明白你的意思,因为它的最大值是255。
char
是16位宽,所以它的最大值是65535,但你是对的,它是无符号的。不过,根据我的经验,
char
>很少使用。
(字节)我
很好:)当执行
byte->int
hmm时,问题就出现了。
char
的最大值是255。
char
是16位宽,所以它的最大值是65535,但你是对的,它是无符号的。不过根据我的经验,
char
很少使用。
(byte)我
很好:)在执行
byte->int
时会出现问题,但这并不能真正解决问题。在第一个版本中,您调用的是
System.out.println(byte)
,在第二个版本中调用的是
System.out.println(int)
。重要的是,
&
操作正在将
i
提升到
int
,因为文本255是
int
@gobernador,它解释了字节是如何从最小值存储到最大值的。对我来说,这听起来像是OP想要使用0到255的值,而使用字节仍然可以恩。我只是在演示它是如何做到的。谢谢,就是这样。但我不明白为什么它是从0到255的,如果它加上255。我假设一个普通字节是01111111,当我加上1时,它看起来像10000000,那就是-128。如果我现在有01111111+1=10000000&FF,它不是11111111吗?@EsoMoa在Java中,最重要的是位(MSB)是符号位。它确定一个数是正数还是负数。如gobemador所说,当您对255(整数[4字节])执行AND(&)操作时,该字节将升级为整数(32位,其中符号位现在为32位,而字节为8位)。因此,如果您有01111111+1=10000000&FF,您将得到000000000000000000000000000000000,这是正的128。@EsoMoa如果您发现我的答案帮助您解决了问题,请单击我的答案的复选标记,以便您的问题得到解决。但是,这并不能真正解决问题。在您的第一个版本中,您正在调用
系统.out.println(字节)
,在第二个字节中,
System.out.println(int)
。重要的是,
&
操作正在将
i
提升到
int
,因为文本255是
int
@gobernador,它解释了字节是如何从最小值存储到最大值的。对我来说,这听起来像是OP想要使用0到255的值,而使用字节仍然可以恩。我只是在演示它是如何做到的。谢谢,就是这样。但我不明白为什么它是从0到255的,如果它加上255。我假设一个普通字节是01111111,当我加上1时,它看起来像10000000,那就是-128。如果我现在有01111111+1=10000000&FF,它不是11111111吗?@EsoMoa在Java中,最重要的是位(MSB)是符号位。它确定一个数是正数还是负数。当您将和(&)与255(整数[4字节])作为gobemad时