gpt4 book ai didi

c - 一个字符如何用包含三个八进制数字的位模式来表示?

转载 作者:太空狗 更新时间:2023-10-29 15:33:02 26 4
gpt4 key购买 nike

来自关于 C 编程语言的 K&R 书的第 2 章(子部分 2.3 命名常量):

Certain characters can be represented in character and string constants by escape sequences like \n (newline); these sequences look like two characters, but represent only one. In addition, an arbitrary byte-sized bit pattern can be specified by

′\ooo′

where ooo is one to three octal digits (0...7) or by

′\xhh′

where hh is one or more hexadecimal digits (0...9, a...f, A...F). So we might write

#define VTAB ′\013′    /* ASCII vertical tab */
#define BELL ′\007′ /* ASCII bell character */

or, in hexadecimal,
#define VTAB ′\xb′ /* ASCII vertical tab */
#define BELL ′\x7′ /* ASCII bell character */

让我感到困惑的部分是以下措辞(强调我的):其中 ooo 是一到三八进制数字 (0...7)。如果有三个八进制数字,则所需的位数将为 9(每个数字 3),这超过了字符所需的字节长度。我肯定在这里遗漏了一些东西。我缺少什么?

最佳答案

\ooo(3 个八进制数字)确实允许指定 9 位值 0 到 111111111(二进制)或 511。是否允许取决于 char 大小。

下面的赋值会在许多环境中生成警告,因为在这些环境中 char 是 8 位。通常允许的最高八进制序列是 \377。但是 char 不必是 8 位。 OP 的“9...超出了字符所需的字节长度”是不正确的。

char *s = "\777";  //warning "Octal sequence out of range"
char c = '\777'; //warning
int i = '\777'; //warning

3 个八进制数字常量 '\141' 在使用 ASCII 的典型环境中与 'a' 相同。但在备用字符集中,'a' 可能会有所不同。因此,如果需要 01100001 的可移植位模式分配,可以使用 '\141' 而不是 'a'。可以通过分配 '\x61' 来实现相同的目的。在某些情况下,八进制模式可能是首选。

C11 6.4.4.4.9 如果不使用前缀,“八进制或十六进制转义序列的值应在相应类型的可表示值范围内:unsigned char”

关于c - 一个字符如何用包含三个八进制数字的位模式来表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com