【问题标题】:Signed bytes in Java, What's the big idea? [duplicate]Java中的有符号字节,有什么大主意? [复制]
【发布时间】:2016-07-21 15:41:38
【问题描述】:

字节值在 0 到 255 之间,非常简单直接。然而 Java 不这么认为,并决定将值介于 -128 和 128 之间,这毁了我和其他许多人的生活。

我只是想知道什么是大创意?为什么每次我需要获取无符号字节值时都必须这样做:

int byteValue = (int) javaByte & 0xFF;

【问题讨论】:

  • 因为您正在使用该转换对整数进行按位运算。真的是这个样子((int) javaByte) & 0x000000FF;
  • Josh Bloch 曾表示,他认为让 byte 签名的决定是 Java 最奇怪的事情。
  • "字节值在 0 到 255 之间" 不,一个字节是 8 位。你用这些位做什么是一个不同的问题。
  • 顺便说一下,它们是从-128到127

标签: java


【解决方案1】:

Java 仅支持有符号整数。 byte 也是整数,所以 Java 在这里是一致的。

这不是 C 的情况,例如 char 类型没有定义它是 signed 还是 unsigned。你需要明确告诉。在我看来,这比默认为signed 要糟糕得多。

无论如何,C 中 char 的初衷是一个字符串字符,其中 unsigned 是有意义的。在 Java 中,字符串字符有不同的类型 - char

【讨论】:

  • 在 C 之前的 Pascal 中,Byte 类型的值以无符号形式存储,但由于提升为 Integer,对它们的算术运算以有符号形式执行。许多 C 实现的行为类似,除非“char”和“int”大小相同。当从较小的部分组装值时(通常用字节完成),无符号类型更容易用于除最上面的块之外的所有块;对于包含两个或更多块的任何数字,使低字节签名所需的额外工作将超过使高字节签名所节省的任何工作。
猜你喜欢
  • 2011-11-10
  • 2011-02-27
  • 1970-01-01
  • 2017-07-30
  • 2021-09-20
  • 2014-03-12
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多