詹姆斯·戈斯林';s解释为什么使用Java';s字节是有符号的

詹姆斯·戈斯林';s解释为什么使用Java';s字节是有符号的,java,types,language-design,byte,Java,Types,Language Design,Byte,一开始,我很惊讶Java决定指定字节是有符号的,范围是-128..127(包括在内)。我的印象是,大多数8位数字表示都是无符号的,其范围为0..255(例如) 那么詹姆斯·戈斯林是否曾被要求解释为什么他决定byte是有符号的呢?在过去,权威编程语言设计师和/或评论家之间是否就这个问题进行过显著的讨论/辩论?看来简单性是主要原因。发件人: 高斯林:作为一名语言设计师,我现在并不认为自己是语言设计师,“简单”最终的真正含义是,我能指望J.Random Developer将规范牢记在脑中吗。这个定义说

一开始,我很惊讶Java决定指定
字节
是有符号的,范围是
-128..127
(包括在内)。我的印象是,大多数8位数字表示都是无符号的,其范围为
0..255
(例如)


那么詹姆斯·戈斯林是否曾被要求解释为什么他决定
byte
是有符号的呢?在过去,权威编程语言设计师和/或评论家之间是否就这个问题进行过显著的讨论/辩论?

看来简单性是主要原因。发件人:

高斯林:作为一名语言设计师,我现在并不认为自己是语言设计师,“简单”最终的真正含义是,我能指望J.Random Developer将规范牢记在脑中吗。这个定义说,举例来说,Java并不是——事实上,这些语言中的很多最终都会出现很多没有人真正理解的情况。对任何C开发人员进行无符号测试,很快你就会发现几乎没有C开发人员真正了解无符号的情况,什么是无符号算术。这样的事情使C变得复杂。我认为Java的语言部分相当简单。你必须查的图书馆


我最初的假设是,这是因为Java根本没有无符号数字类型。为什么
byte
应该是一个例外
char
是一个特例,因为它必须表示UTF-16代码单元(感谢Jon Skeet的引用)

我不知道James Gosling有任何直接引用,但有一个官方RFE用于未签名的
字节

状态:11关闭,将不会修复,请求增强

请扩展Java设计以允许未签名类型,尤其是 无符号
字节

我一直在想为什么Java中没有无符号整数类型。信息技术 在我看来,对于
字节
长度值来说,没有
它们[……]

我认识到这是Java开发人员做出的设计决策。 我不明白的是为什么。他们是否考虑了无符号整数类型? 还是有害的,选择保护我不受自己伤害


根据“Oak语言规范0.2”又名Java语言:

Oak字节类型是C程序员通常认为的字符类型。但在Oak语言中,字符是16位宽的。使用单独的字节类型可以消除C语言中将字符解释为8位整数和字符之间的混淆

您可以从这里获取postscript副本:

()

此外,该网站上还发布了部分采访内容:(他在为java中缺少无符号字节辩护)

正在添加从上述页面获取的采访

*"

问:程序员经常谈论 用“简单语言”编程。这句话对我意味着什么 在你看来,[C/C++/Java]是一种简单的语言吗

里奇:[为简洁起见删除]

Stroustrup:[为简洁起见已删除]

高斯林:对于我这个语言设计师来说,这并不算什么 就我自己而言,这些天来,“简单”的真正含义是可以 我希望J.Random Developer在脑子里记住规范。那 定义说,例如,Java并不是——事实上,它有很多优点 这些语言最终会出现很多没有人知道的情况 真的理解。测试任何C开发人员关于未签名的和漂亮的 很快你就会发现几乎没有一个C开发人员真正理解什么 接着是无符号,什么是无符号算术,诸如此类 使C变得复杂。我认为,Java的语言部分相当不错 很简单。你必须查找这些库

另一方面,根据

从前,一棵橡树。。。 海因茨·卡布茨 二○○三年七月十五日

。。。 为了填补我对Java历史的空白,我开始在 最终偶然发现了橡树语言 Oak版本0.2的规范。Oak是什么的原始名称 现在通常被称为Java,本手册是最古老的手册 适用于Oak(即Java)。 ... 无符号整数值(第3.1节)

规范中说:“四种整数类型的宽度为8、16、32 和64位,除非前缀为unsigned修饰符,否则都是有符号的

侧边栏中写道:“unsigned尚未实现;它可能 你说得对极了。 "*


没有理由让
字节
不带符号。当您使用
字符
类型来表示字符时,
字节
通常不会执行
字符

的任务。这是一个很好的问题。这确实是一个无用的数据类型。“我的印象是大多数8位数字表示都是无符号的。。。“嗯,叫做“字节”的通常是,是的。那些被称为“char”的往往不是。高斯林希望所有东西都有签名,这是公平的,尽管我真希望他能用一个不同的名字——8位签名号码。(但是,我真希望他在flippin语言中也有无符号的数字。)不要抱怨Java没有无符号字节,这不是问题。唯一的小麻烦是,十六进制常量表需要强制转换为字节。其他一切都看@starblue,嗯?显然,您从来没有用Java编写过任何字节处理代码(解析器、编码器)。。。这是一个主要的皮塔。也可能是性能问题,这取决于jvm如何优化丢弃(或不优化)。顺便说一句,问题甚至不仅限于字节,而且还限于符号扩展的缩写int。@starblue尝试重构基于字节的通信协议的Java实现,然后告诉我无符号字节不是问题!更像噩梦