我正在阅读有关以下代码行的电子邮件论据:
p = (unsigned char)random();
随机函数返回一个long,有人说这是不安全的,因为类型转换可能需要MSB而不是LSB。我知道在x86上,类型转换将返回LSB,但是我无法找到关于这是否实际上由ANSI C强制要求的信息,或者它是否是那些特定于实现的"未定义的行为之一#34;
答案 0 :(得分:6)
这是在C标准中规定的。
6.3.1.3p2中的C99说:
"否则,如果新类型是无符号的,则通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内为止"
在双补码系统中,它意味着取最低有效位。