gpt4 book ai didi

c - 通过 printf 命令打印八进制数

转载 作者:太空狗 更新时间:2023-10-29 17:19:18 24 4
gpt4 key购买 nike

我一直在努力理解八进制数的 printf 功能。如果我把代码写成:

int main()
{
char *s = "\123";
printf("%s",s);
}

它给我一个 S 的输出,这实际上是正确的,因为 S 的 ASCII 是八进制的 123。但我的问题是,编译器如何识别要从八进制转换的数字序列。例如:

char *s = "\123456" 

会给出 S456 的输出

八进制转换最多需要3个数字吗???

八进制是否有最大限制(最大 3 位八进制数为 777)

现在因为最多有 255 个 ascii 字符(八进制 377),所以当我尝试打印 777 时,它打印出一个典型的 �ascii 字符,这可能是因为没有分配给这个数字的 ascii。此功能是否也依赖于编译器/操作系统???

我希望我已经很清楚了,因为这是我在这里的第一个问题 :-)

最佳答案

  1. 是的。三位数字是八进制字 rune 字的最大值。来自规范 6.4.4.4 字符常量:

    octal-escape-sequence:
    \ octal-digit
    \ octal-digit octal-digit
    \ octal-digit octal-digit octal-digit

    hexadecimal-escape-sequence:
    \x hexadecimal-digit
    hexadecimal-escape-sequence hexadecimal-digit

  2. 如您所述,最大八进制转义序列为 \777。从上面的规范引用中可以看出,十六进制转义序列没有最大限制。

  3. 只有 128 个 ASCII 字符 (0-127)。这意味着您可以使用八进制 \000\177 作为 ASCII。如果您使用不同的字符集,您可能能够在 8 位字符中转到 \377,并一直到 \777(或更高,使用wchar_t 的十六进制转义序列)。规范说:

    The value of an octal or hexadecimal escape sequence shall be in the range of representable values for the type unsigned char for an integer character constant, or the unsigned type corresponding to wchar_t for a wide character constant.

    在大多数机器上,unsigned char 是一种 8 位类型,在该上下文中将八进制转义序列限制为 \377,将十六进制序列限制为 \xff。在 32 位 wchar_t 上下文的情况下,十六进制序列可能高达 \xffffffff

关于c - 通过 printf 命令打印八进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807036/

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