C 和 ASCII 代码 : how could 128 represents a char if it's range is from -128 to 127?

标签 c ascii

我提到这个问题是因为我无法理解如果范围是从-128到127,如何用有符号字符表示从0到255的ASCII字符。

由于 char = sizeof(char)= 1 个字节,因此有理由认为它可以轻松表示最大 255 的值;

那么为什么赋值:char a = 128 没有任何错误,为什么我不应该使用 unsigned char 呢。

提前谢谢您!

最佳答案

char c = 128; 本身在 C 中是正确的。标准规定 char 包含 CHAR_BIT 位,该位可以更大大于 8。此外,char 可以是有符号或无符号的,由实现定义,并且 unsigned char 必须至少包含范围 [0, 255]。

因此,如果 char 大于 8 位,或者 char 默认情况下是无符号的,则此行是有效且相关的。

即使在常见的 8 位有符号 char 实现中,表达式仍然明确定义了如何将 128 转换为适合 char,所以没有问题。

在实际情况下,编译器通常会发出警告,例如 clang :
警告:从“int”到“char”的隐式转换会将值从 128 更改为 -128 [-Wconstant-conversion]

关于C 和 ASCII 代码 : how could 128 represents a char if it's range is from -128 to 127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53417590/

相关文章:

c - 在 C 中打印控制字符的图形表示

C 内存分配(malloc)

c - 一组可变宏

c - 如何在文件中用 c 打印根符号

c - 在 C 中打印 ASCII 代码值及其等效字符

python - 从 python 上传到 BigQuery 时,某些行出现 ASCII 0 错误

c - execvp() 不让我

c - 如何在c中使用动态字符串数组

c - Assembly音频合成的数据结构

java - 如何使用java替换字符串之间存在的ascii字符