ANSI C实际上是否指定在将类型转换为较小的整数时使用哪些字节?

时间:2013-08-06 23:56:05

标签: c ansi

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

p = (unsigned char)random();

随机函数返回一个long,有人说这是不安全的,因为类型转换可能需要MSB而不是LSB。我知道在x86上,类型转换将返回LSB,但是我无法找到关于这是否实际上由ANSI C强制要求的信息,或者它是否是那些特定于实现的"未定义的行为之一#34;

1 个答案:

答案 0 :(得分:6)

这是在C标准中规定的。

6.3.1.3p2中的C99说:

  

"否则,如果新类型是无符号的,则通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内为止"

在双补码系统中,它意味着取最低有效位。