为什么C中的char
1
字节长?为什么它不是2
个字节或4
个字节长?
将它保持为1
字节的基本逻辑是什么?我知道在Java中,char
长度为2
个字节。同样的问题。
答案 0 :(得分:22)
char
在C
中是1个字节,因为它是在标准中指定的。
最可能的逻辑是。 char
(标准字符集中)的(二进制)表示可以适合1
个字节。在C
的主要开发时,最常用的标准是ASCII
和EBCDIC
,它们分别需要7位和8位编码。因此,1
byte 足以表示整个字符集。
OTOH,在Java
出现的时候,扩展的charcater集和unicode
的概念出现了。因此,为了面向未来并支持可扩展性,char
被赋予2 bytes
,它能够处理扩展字符集值。
答案 1 :(得分:5)
为什么char
会超过1个字节? char通常表示ASCII字符。只需看一下ASCII表,(扩展)ASCII代码中只有256个字符。因此,您只需要表示0到255之间的数字,即8bit = 1byte。
查看ASCII表格,例如在这里:http://www.asciitable.com/
那就是C.当Java被设计时,他们预计将来任何字符(也是Unicode)都可以保存在16bits = 2bytes中。
答案 2 :(得分:5)
这是因为C languange已有37年历史,并且不需要为1个字符添加更多字节,因为只使用了128个ASCII字符(http://en.wikipedia.org/wiki/ASCII)。
答案 3 :(得分:2)
当C开发出来时(第一本书是由其开发人员在1972年发布的),两个主要的字符编码标准分别是ASCII和EBCDIC,分别是7和8位字符编码。而且内存和磁盘空间在当时都是更受关注的问题; C在具有16位地址空间的机器上普及,并且对字符串使用多于一个字节将被认为是浪费。
当Java出现(20世纪90年代中期)时,一些有远见的人能够认识到语言可以利用国际标准进行字符编码,因此选择Unicode作为其定义。到那时,内存和磁盘空间不再是问题。
答案 4 :(得分:0)
您不需要多于一个字节来表示整个ascii表(128个字符)。
但是还有其他C类型有更多空间来包含数据,例如 int 类型(4字节)或 long double 类型(12字节)。
所有这些都包含数值(甚至是字符!即使它们被表示为“字母”,它们是“数字”,你可以比较它,添加它......)。
这些只是不同的标准尺寸,例如长度为cm和m。