Java中的有符号字节,是什么意思?

3

Byte值介于0和255之间,非常简单明了。然而Java认为它应该介于-128和128之间,这毁了我的生活和许多人的生活。

我只想知道这是怎么回事?为什么每次我需要获取无符号字节值时都要这样做:

int byteValue = (int) javaByte & 0xFF;

1
https://dev59.com/fHA75IYBdhLWcg3wxsNn#3108328 - Alex Salauyou
1
因为你正在对整数执行位运算,并进行了类型转换。实际上看起来是这样的:((int) javaByte) & 0x000000FF; - flakes
1
Josh Bloch曾表示,他认为Java中将byte定义为有符号的决定是最奇怪的事情。 - Paul Boddington
1
"字节值介于0和255之间"。不,一个字节是8位。你对这些位做什么是另一个问题。 - MattPutnam
顺便提一下,它们的取值范围是从-128到127。 - Alex Salauyou
1个回答

1
Java仅支持有符号整数。byte也是整数,因此Java在这里保持一致。对于C语言来说,情况并非如此,例如char类型没有定义它是有符号还是无符号的。你需要明确说明。在我看来,这比说它默认为有符号要糟糕得多。无论如何,在C语言中,char的原始意图是字符串字符,其中无符号是有意义的。在Java中,有不同的类型用于字符串字符 - char。

在 Pascal 中,Byte 类型的值是作为无符号存储的,但由于提升为 Integer,因此对它们进行的算术运算是有符号的。许多 C 实现也是如此,除非 "char" 和 "int" 的大小相同。当从较小的部分组装值(通常使用字节)时,除了最上面的块之外,无符号类型更容易处理;对于任何包含两个或多个块的数字,通过使较低的字节带符号所需的额外工作将超过通过使上字节带符号所节省的任何工作。 - supercat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接