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

Nap*_*art 5 c ansi

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

p = (unsigned char)random();
Run Code Online (Sandbox Code Playgroud)

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

oua*_*uah 6

这在C标准中规定.

6.3.1.3p2中的C99说:

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

在二进制补码系统中,它意味着取最低有效位.