5

我正在阅读有关以下代码行的电子邮件参数:

p = (unsigned char)random();

random 函数返回一个 long,有人说这是不安全的,因为类型转换可能会采用 MSB 而不是 LSB。我知道在 x86 上,类型转换会返回 LSB,但我找不到任何关于这是否是 ANSI C 实际要求的信息,或者它是否是那些特定于实现的“未定义行为”之一。

4

1 回答 1

6

这是在 C 标准中指定的。

6.3.1.3p2 中的 C99 说:

“否则,如果新类型是无符号的,则在新类型可以表示的最大值的基础上反复加减一,直到该值在新类型的范围内。”

在二进制补码系统上,这意味着取最低有效位。

于 2013-08-06T23:59:08.273 回答