R..*_*R.. 9 c twos-complement unsigned-char
显然,标准对此没有任何说明,但我对实际/历史观点更感兴趣:使用非二进制补码算法的系统是否使用了char无符号的普通类型?否则你可能有各种各样的怪异,比如null终结符的两个表示,以及无法表示所有"byte"值char.做这么奇怪的系统真的存在吗?
用于终止字符串的空字符永远不会有两个表示.它是这样定义的(即使在C90中):
所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中
因此,对一个补码的"负零"不会这样做.
也就是说,我真的对非二进制补C实现知之甚少.我在大学时使用了一个补充机器的方式,但是不记得太多了(即使我当时关心标准,它还存在之前).
确实,对于商业化生产的计算机的前10年或20年(1950年代和60年代),显然存在一些关于如何用二进制表示负数的一些分歧.实际上有三个竞争者:
-x == ~x-x = x ^ 0x80000000我认为最后一个重要的补充机器可能是CDC-6600,当时是世界上最快的机器,也是第一台超级计算机的前身.1.
不幸的是,你的问题无法得到真正的答案,不是因为这里没有人知道答案:-)但是因为选择从来没有必要.这实际上有两个原因:
二进制补码与字节机同时接管.Byte寻址通过二进制补充IBM System/360在世界上崭露头角.以前的机器没有字节,只有完整的单词有地址.有时程序员会在这些单词中包含字符,有时他们只会使用整个单词.(字长从12位到60位不等.)
C字节机器和二进制补码转换后十年才被发明.项目#1发生在20世纪60年代,C在20世纪70年代首次出现在小型机器上,直到20世纪80年代才开始接管世界.
因此,从来没有一个机器有签名字节,C编译器和二进制补码数据格式以外的东西.以null结尾的字符串的想法可能是由一个汇编语言程序员一个接一个地思考的反复发明的设计模式,但我不知道它是由编译器指定直到C时代.
在任何情况下,第一个实际标准化的C ("C89")简单地指定"附加值为零的字节或代码",并且从上下文中可以清楚地看出它们试图与数字格式无关.所以,"+ 0"是一个理论上的答案,但它在实践中可能永远不会存在.
1. 6600是历史上最重要的机器之一,而不仅仅是因为它很快.由Seymour Cray自己设计,它引入了无序执行和后来统称为"RISC"的各种其他元素.虽然其他人试图声称信用,但Seymour Cray是RISC架构的真正发明者.毫无疑问他发明了超级计算机.实际上很难说出他没有设计的过去的"超级计算机" .
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |