如果我想把一个整数存储到一个char类型的变量中,那么存储整数的哪个字节呢?

If I want to store an integer into a char type variable, which byte of the integer will be stored?

int a = 0x11223344;

char b = (char)a;

我是编程和学习 C 的新手。为什么我在这里得到 b 的值是 D

If I want to store an integer into a char type variable, which byte of the integer will be stored?

C 标准没有完全定义。

在您尝试的特定情况下,可能发生的情况是 0x11223344 的低八位存储在 b 中,产生 4416 (6810) in b,打印出“D”是因为你的系统使用ASCII字符编码,而68是“D”的ASCII码。

但是,您应该警惕这样的工作,因为它取决于几件事,并且可能会有变化。

首先,C 标准允许 char 有符号或无符号。它还允许 char 是八位或更大的任何宽度。在今天的大多数 C 实现中,它是八位。

其次,从intchar的转换取决于char是有符号的还是无符号的,C标准可能没有完全定义。

如果 char 是无符号的,则转换定义为对模 M+1 进行换行,其中 Mchar 中可表示的最大值。实际上,这与获取值的低字节相同。如果无符号的char有8位,它的M就是255,所以M+1就是256。

如果 char 有符号且值超出 char 类型的范围,则转换为 implementation-defined:它可能会陷入或产生 implementation-defined价值。您的 C 实现可能会将转换包装为有符号整数类型,类似于将转换包装为无符号类型的方式,但另一个合理的行为是将 out-of-range 值“钳制”到类型的限制,CHAR_MINCHAR_MAX。例如,将 −8000 转换为 char 可以产生最小值 −128,而将 0x11223344 转换为 char 可以产生最大值 +127.

第三,C 标准不要求实现使用 ASCII。使用 ASCII 非常普遍。 (通常,字符编码不只是 ASCII,因为 ASCII 只涵盖从 0 到 127 的值。C 实现通常使用 ASCII 之外的一些扩展来表示 128 到 255 的值。)