Press "Enter" to skip to content

K&R2 第二章提到类型转换示例

例如,假设 int 为 16 位,long 为 32 位。 然后 -1L < 1U,因为 1U 是一个 unsigned int,被提升为一个有符号的 long。 但是 -1L > 1UL 因为 -1L 被提升为无符号长整数,因此看起来是一个很大的正数。

-1L < 1U:

-1L 作为 32 位长 int = 表示为 0xFFFFFFFF。 在这种情况下不会被转换,因此解释保持 -1

1U 作为 16 位无符号整数 = 0x0001。 提升为 32 位长 int -> 0x00000001 = 解释为 1

比较结果:-1 < 1

-1L > 1UL:

-1L = 32 位长整数 = 0xFFFFFFFF。 转换为 unsigned long int = 0xFFFFFFFF。 因为它现在是无符号的,所以它会被解释为 (2^32 – 1)

1UL 作为 32 位长 int = 表示为 0x00000001。 在这种情况下不会被转换,所以解释保持 1

比较结果:(2^32 – 1) > 1

Be First to Comment

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注