C语言中为什么char是1个字节
Why char is of 1 byte in C language
为什么 C 中的 char
1
字节长?为什么它不是 2
字节或 4
字节长?
保持1
字节的基本逻辑是什么?我知道 Java 中的 char
是 2
字节长。同样的问题。
char
在 C
中是 1 个字节,因为它在标准中是这样指定的。
最有可能的逻辑是。 char
(标准字符集中)的(二进制)表示可以放入 1
字节。在 C
初步开发时,最常用的标准是 ASCII
和 EBCDIC
,它们分别需要 7 位和 8 位编码。因此,1
字节足以表示整个字符集。
OTOH,在出现 Java
期间,出现了扩展字符集和 unicode
的概念。因此,为了 面向未来 并支持可扩展性,char
被赋予 2 bytes
,它能够处理 扩展的 字符集值。
为什么 char
可以容纳超过 1 个字节? char 通常表示 ASCII 字符。看看 ASCII table,(扩展)ASCII 码只有 256 个字符。所以你只需要表示从 0 到 255 的数字,归结为 8bit = 1byte.
看看 ASCII Table,例如这里:http://www.asciitable.com/
那是 C 语言。在设计 Java 时,他们预计将来任何字符(也包括 Unicode)都可以用 16 位 = 2 字节来存储。
这是因为C语言已经37岁了,1个字符不需要更多的字节,因为只使用了128个ASCII字符(http://en.wikipedia.org/wiki/ASCII)。
您不需要超过一个字节来表示整个 ascii table(128 个字符)。
但是还有其他 C 类型有更多的空间来包含数据,比如 int 类型(4 个字节)或 long double 类型(12 个字节)。
所有这些都包含数值(即使是字符!即使它们表示为 "letters",它们也是 "numbers",您可以比较它,添加它...)。
这些只是不同的标准尺寸,例如长度为 cm 和 m,.
在开发 C 时(第一本关于它的书由其开发者于 1972 年出版),两个主要的字符编码标准是 ASCII 和 EBCDIC,它们分别是字符的 7 位和 8 位编码。而内存和磁盘 space 在当时都是比较受关注的; C 在具有 16 位地址的机器上得到普及 space,使用超过一个字节的字符串会被认为是浪费。
到 Java 出现时(1990 年代中期),一些有远见的人能够察觉到一种语言可以使用国际标准进行字符编码,因此选择了 Unicode 作为其定义。那时内存和磁盘 space 已经不是问题了。
C 语言标准定义了一个虚拟机,其中所有对象占用整数个抽象存储单元,这些单元由一些固定数量的位组成(由 CHAR_BIT
limits.h 中的宏)。每个存储单元必须是唯一可寻址的。一个存储单元定义为基本字符集1中单个字符占用的存储量。因此,根据定义,char
类型的大小为 1。
最终,这些抽象存储单元必须映射到物理硬件上。大多数常见架构使用可单独寻址的 8 位字节,因此 char
对象通常映射到单个 8 位字节。
通常。
从历史上看,本机字节大小一直在 6 到 9 位宽之间。在C中,char
类型必须至少8位宽才能表示基本字符集中的所有字符,所以要支持6位字节的机器,编译器可能必须将 char
对象映射到两个本机机器字节,其中 CHAR_BIT
为 12。sizeof (char)
仍为 1,因此大小为 N
的类型将映射到2 * N
本机字节。
1. 基本字符集全部26个大小写英文字母,10个数字,标点符号等图形字符,换行符,制表符,换页符等控制字符,全部可以轻松放入8个位。
为什么 C 中的 char
1
字节长?为什么它不是 2
字节或 4
字节长?
保持1
字节的基本逻辑是什么?我知道 Java 中的 char
是 2
字节长。同样的问题。
char
在 C
中是 1 个字节,因为它在标准中是这样指定的。
最有可能的逻辑是。 char
(标准字符集中)的(二进制)表示可以放入 1
字节。在 C
初步开发时,最常用的标准是 ASCII
和 EBCDIC
,它们分别需要 7 位和 8 位编码。因此,1
字节足以表示整个字符集。
OTOH,在出现 Java
期间,出现了扩展字符集和 unicode
的概念。因此,为了 面向未来 并支持可扩展性,char
被赋予 2 bytes
,它能够处理 扩展的 字符集值。
为什么 char
可以容纳超过 1 个字节? char 通常表示 ASCII 字符。看看 ASCII table,(扩展)ASCII 码只有 256 个字符。所以你只需要表示从 0 到 255 的数字,归结为 8bit = 1byte.
看看 ASCII Table,例如这里:http://www.asciitable.com/
那是 C 语言。在设计 Java 时,他们预计将来任何字符(也包括 Unicode)都可以用 16 位 = 2 字节来存储。
这是因为C语言已经37岁了,1个字符不需要更多的字节,因为只使用了128个ASCII字符(http://en.wikipedia.org/wiki/ASCII)。
您不需要超过一个字节来表示整个 ascii table(128 个字符)。
但是还有其他 C 类型有更多的空间来包含数据,比如 int 类型(4 个字节)或 long double 类型(12 个字节)。
所有这些都包含数值(即使是字符!即使它们表示为 "letters",它们也是 "numbers",您可以比较它,添加它...)。
这些只是不同的标准尺寸,例如长度为 cm 和 m,.
在开发 C 时(第一本关于它的书由其开发者于 1972 年出版),两个主要的字符编码标准是 ASCII 和 EBCDIC,它们分别是字符的 7 位和 8 位编码。而内存和磁盘 space 在当时都是比较受关注的; C 在具有 16 位地址的机器上得到普及 space,使用超过一个字节的字符串会被认为是浪费。
到 Java 出现时(1990 年代中期),一些有远见的人能够察觉到一种语言可以使用国际标准进行字符编码,因此选择了 Unicode 作为其定义。那时内存和磁盘 space 已经不是问题了。
C 语言标准定义了一个虚拟机,其中所有对象占用整数个抽象存储单元,这些单元由一些固定数量的位组成(由 CHAR_BIT
limits.h 中的宏)。每个存储单元必须是唯一可寻址的。一个存储单元定义为基本字符集1中单个字符占用的存储量。因此,根据定义,char
类型的大小为 1。
最终,这些抽象存储单元必须映射到物理硬件上。大多数常见架构使用可单独寻址的 8 位字节,因此 char
对象通常映射到单个 8 位字节。
通常。
从历史上看,本机字节大小一直在 6 到 9 位宽之间。在C中,char
类型必须至少8位宽才能表示基本字符集中的所有字符,所以要支持6位字节的机器,编译器可能必须将 char
对象映射到两个本机机器字节,其中 CHAR_BIT
为 12。sizeof (char)
仍为 1,因此大小为 N
的类型将映射到2 * N
本机字节。
1. 基本字符集全部26个大小写英文字母,10个数字,标点符号等图形字符,换行符,制表符,换页符等控制字符,全部可以轻松放入8个位。