当前位置: 首页 > 知识库问答 >
问题:

在Java中转换字节后,正值如何变成负值?

澹台俊达
2023-03-14
public class Test1 {

    public static void main(String[] args) {

        byte b1=40;
        byte b=(byte) 128;

        System.out.println(b1);
        System.out.println(b);
    }
}

输出为

40
-128

第一个输出是40,我理解,但第二个输出是128,怎么可能?是否可能是因为它超出了其范围?如果是,它在字节转换后是如何工作的。。。帮助我

共有2个答案

东方旭东
2023-03-14

Java中的字节以8位2的补码格式表示。如果整数在128-255范围内,并将其转换为一个字节,则它将成为一个负值字节(介于-1和-128之间)。

话虽如此,您可能应该避免使用byte,因为它们存在问题。如果您将结果转换为byte,您会注意到,因为运算符实际上返回int。您应该在java中坚持使用int和long,因为它们实现得更好。

孔星宇
2023-03-14

当您将128(10000000二进制)转换为8位字节类型时,符号位设置为1,因此数字被解释为负数。Java使用二的补码表示,因此10000000是用8位表示的最小负数。

在这种解释下,129变成-127130变成-126,以此类推,一直到255(二进制的11111111),这变成了-1

 类似资料:
  • 问题内容: 如何转换成? 还给我一个。 问题答案: 调用toArray()之后,您可以将结果传递到Apache Commons toPrimitive方法中: http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/ArrayUtils.html#toPrimitive(java.lang.Byte [])

  • 问题内容: 我正在从硬件设备读取8字节的数据。我需要将它们转换为数值。我想将它们转换为适合8个字节的长度。我对Java和低级数据类型操作不是很熟悉。我似乎有两个问题(除了几乎没有有关硬件的文档的事实外),这些字节期望是无符号的,所以我无法进行直接整数转换。我不确定它们是什么字节序。 任何意见,将不胜感激。 最终结束了(摘自一个星期前我可能应该已经读过的一些源代码): 问题答案: 对于字节序,请测试

  • 问题内容: 我有一个String数组。我想将其转换为字节数组。我使用Java程序。例如: 转换成: 我能做什么? 问题答案: 看一下样本,我想您的意思是字符串数组实际上是字节的十六进制表示形式的数组,不是吗? 如果是,那么对于每个字符串项,我将执行以下操作: 检查字符串是否仅包含2个字符 这些字符的间隔为‘0’..‘9’或’a’..’f’(还要考虑其大小写) 将每个字符转换为相应的数字,减去代码值

  • PS:UTF-8不能工作,因为它转换了一些不同值的字节。我测试了,它不起作用。 PS2:不,我不想要。

  • 问题内容: 如何在Java中将字节大小转换为人类可读的格式?像1024应该变成“ 1 Kb”,而1024 * 1024应该变成“ 1 Mb”。 我有点讨厌为每个项目编写此实用程序方法。Apache Commons中是否为此有任何静态方法? 问题答案: SI(1 k = 1,000) 二进制(1 K = 1,024) } 输出示例:

  • 问题内容: 我知道Java不允许无符号类型,所以我想知道它如何将整数转换为字节。假设我有一个值为255的整数a,并且将该整数转换为一个字节。该值表示在字节11111111中吗?换句话说,该值是否更多地视为带符号的8位整数,还是仅直接复制该整数的后8位? 问题答案: 这称为缩小原始转换。根据规格: 将有符号整数缩小为整数类型 T会 简单地丢弃除 n个 最低阶位以外的所有位,其中 n 是用于表示类型