C 编程:类型 char 变量仅适用于一个字母或数字



在教科书"C编程语言"中,第9页有以下一行。

"字符 - 单个字节">

这是否意味着类型"char"变量只能保留一个字母,数字或符号?

我还想了解该术语的精确定义。

我的理解在这里。这是对的吗?

>字符:任何字母、数字或符号。

字符串:几个字符。


如果错了,我想要正确的定义。

感谢社区所有成员每天的支持。

字符集的正式 C 标准定义 (5.2.1):

应定义两组字符及其关联的整理序列:写入源文件的字符集(字符集)和在执行环境中解释的字符集(执行字符集)。每个集合进一步分为一个基本字符集,其内容由此子句提供,以及一组零个或多个特定于区域设置的成员(不是基本字符集的成员),称为扩展字符。组合集也称为扩展字符集。执行字符集成员的值是实现定义的。

基本字符集指定为包含:

  • 拉丁字母的 26 个大写字母/--/

  • 拉丁字母的 26 个小写字母/--/

  • 10 个十进制数字/--/

  • 以下 29 个图形字符

    ! " # % & ' ( ) * + , - . / :
    ; < = > ? [  ] ^ _ { | } ~
    
  • 空格字符和控件字符表示水平制表符、垂直制表符和表单馈送。

  • 在基本执行字符集中,应有 控制字符表示警报、退格键、回车符和换行符。

表示源的每个成员和执行基本 字符集应适合一个字节。

然后6.2.5说:

声明为类型char的对象足够大,可以存储基本执行字符集的任何成员。

字节的正式定义非常相似(3.6):

byte<</strong>br/>可寻址数据存储单元,大到足以容纳执行环境的基本字符集的任何成员

此外,指定char始终为 1 个字节大 (6.5.3.4):

sizeof运算符产生其操作数/--/
当 sizeof 应用于类型为charunsigned charsigned char,(或其限定版本)结果为 1。

然而,C标准没有指定一个字节中的位数,只是它必须是8位或更多。

标准(C1570 的 n11 草案)说:

声明为 char 类型的对象足够大,可以存储基本 执行字符集。如果基本执行字符集的成员存储在 char 对象,其值保证为非负数。

由于标准字符集包含所有大小写字母、十进制数字和其他一些字符,因此至少需要 7 位才能表示。无论如何,标准要求字符的大小至少为 8 位:

[该]实施定义的值在幅度(绝对值)上应等于或大于所示值,并具有相同的符号。
— 不是位字段的最小对象的位数(字节) CHAR_BIT 8

字符必须可单独寻址。出于这个原因,char 被称为一个字节,根据定义,无论确切的位数如何,sizeof(char)都是 1 - 一些旧的大型机使用 12 或 16 位字符。

unsigned charsigned char是整数类型,使用与char相同的存储大小。它们是不同的类型,但 3 种类型之间的转换是完美定义的,并且永远不会改变表示。即使是不同的类型,该标准也要求:

实现应将 char 定义为具有相同的范围, 表示,以及作为有符号字符或无符号字符的行为。

在常见体系结构上,char使用 8 位。范围 0-127 中的所有值都表示 ASCII 字符集(注意:这不是标准强制要求的,并且使用了 EBCDIC 等其他表示形式)。其他范围(-128 到 -1 或 128-255)中的值称为扩展字符,可以表示 ISO-8859-x(或拉丁语)字符集或多字节字符集中的字节,如 UTF-8 或 UCS2(UTF16 的子集,用于 0-FFFF 范围内的 unicode 字符)。ISO-8859-1 或 Latin1 是一个单字节字符集,表示 à-255 范围内的 Unicode 字符。它曾经是一个事实上的标准,Windows仍然使用CP1252(一个接近的变体)作为西欧语言系统。

TL/DR:直接回答您的问题:

  • char 表示一些符号,至少是基本的执行字符集
  • 按照惯例,字符串是以 null 结尾的 char 数组。表示的符号取决于使用的字符集,对于多字节字符集(如 UTF8),字符和符号之间没有 1 对 1 的关系

"char" 占用一个字节的存储空间,可以表示 -128 到 +127 之间的值。这通常用于保存单个 ASCII 字符。在 ASCII 编码中,所有可打印字符都被分配了介于 32(空格)到 126(波浪号,'~')之间的值,不可打印字符分配给其余代码。

请注意,与 Java char(可以加粗任何 unicode 字符)不同,"c"char 将无法表示拉丁字符。

通常char是一个单字节大小的变量类型,由于字节由 8 位组成,因此 char 的值范围为 0-255 或 -128-127(如果有符号,则 char 的值范围为 0-255 或 -128-127(一位用于符号指示)。

这 255 个选项用于表示一个值,如果是char、符号、字母或数字(或一些特殊字符)。

例如,如果您想存储日语字母或表情符号,则需要 2 个字节(因为众所周知,字符比 255 多得多)。您将必须使用支持这种大小的类型 - 对于 unicode,例如wchar_t

最新更新