gpt4 book ai didi

java - 窄转换为 byte 后 128 int 如何变为 -128

转载 作者:行者123 更新时间:2023-11-30 06:20:31 26 4
gpt4 key购买 nike

我知道在 Java 中字节有 8 位内存,即从 -128 到 127。我也知道缩小转换的概念。并且 int 失去了一些精度。但是有人可以帮助我理解以下内容

    public class PrimitiveTypes {
public static void main(String[] args) {
Byte byteVar= (byte) 128;

System.out.println(byteVar);

}
}


o/p is -128

请不要告诉我因为 127 的周期它显示 -128 。我需要这里发生的二进制算术。我能从网上找到的是 java 将整数存储在 2 的补码中,用于存储负号。所以从 2 的补码开始

128 becomes 10000000

after flipping 11111111

加1位就是

10000000

问题是这个10000000是怎么来的变成-128?

答案:

谢谢大家,我得到了答案:

我需要将 2 的补码 no 10000000 转换为十进制,如

you first check if the number is negative or positive by looking at the sign bit. If it is positive, simply convert it to decimal. If it is negative, make it positive by inverting the bits and adding one. Then, convert the result to decimal. The negative of this number is the value of the original binary.

Interpret 11011011 as a two's complement binary number, and give its decimal equivalent.
First, note that the number is negative, since it starts with a 1.
Change the sign to get the magnitude of the number.
1 1 0 1 1 0 1 1
¬ 0 0 1 0 0 1 0 0
+ 1
0 0 1 0 0 1 0 1
Convert the magnitude to decimal: 001001012 = 25_16 = 2×16 + 5 = 37_10.
Since the original number was negative, the final result is -37.

所以就我而言 10000000成为 01111111加 1 将是 10000000这是128并且最初的 no 是负数,因为第一位是 1所以-128

最佳答案

在二进制中,int 128 看起来像这样。

0000 0000 0000 0000 0000 0000 1000 0000

这是 32 位,4 个字节。

当您将其转换为 byte 时,您会得到最后 8 个二进制数字。

1000 0000

结果是字节-128 的二进制表示。

所以结果确实是-128。

二进制中的所有字节值都是这样的:

1000 0000  -> - 128
1000 0001 -> - 127
1000 0010 -> - 126
...
1111 1110 -> -2
1111 1111 -> -1
0000 0000 -> 0
0000 0001 -> 1
0000 0010 -> 2
...
0111 1110 -> 126
0111 1111 -> 127

这应该让你很清楚。

你的困惑可能是因为你在想
1000 0000 作为无符号字节值。在Java中有
没有无符号字节。第 1 位决定符号。
如果有无符号字节(如某些其他语言),
这个二进制值确实是 128 而不是 -128

关于java - 窄转换为 byte 后 128 int 如何变为 -128,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com