gpt4 book ai didi

c - 更好地理解 printf - 当提供的值为负时,它用 "%c"打印什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:11 34 4
gpt4 key购买 nike

在 Kernighan & Ritchie 中,它说“当有符号或无符号的 char 数据类型取决于机器时,所有可打印字符都是正数。”

谁能给我解释一下这行的意思?我的系统已对字符进行签名,但即使使用负值(例如 -90),printf 也会打印一个字符(即使它不是一个非常熟悉的字符)。

最佳答案

ASCII 字符集定义了从0x000x7F 的代码点。它们是用无符号字节值还是有符号字节值表示并不重要,因为此范围对两者都是通用的。

可打印的字符在0x200x7E之间,都是ASCII的一部分。术语可打印字符 并未定义世界上所有可能的可打印字符。相反,它是在 ASCII 领域内定义的。

0x800xFF 的字节值在 ASCII 中没有定义,不同的系统将不同的字符分配给这个范围内的值,导致许多不同类型的代码页在它们的 ASCII 范围,但在此范围内有所不同。这也是有符号字节和无符号字节的值不同的范围。

printf 的实现在其输入中遇到 %c 键时查找单个字节值。从您作为 printf 函数调用者的角度来看,此字节值可能是有符号或无符号的,但 printf 并不知道这一点。它只是将这 8 位传递给它所连接的输出流,并且该流发出 0x000xff 内的字符。

符号的概念在发出字符的输出管道内没有任何意义。因此,无论您发送 255 还是 -1,都会发出映射到特定代码页中的 0xFF 的字符。

关于c - 更好地理解 printf - 当提供的值为负时,它用 "%c"打印什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6729488/

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