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