我正在阅读有关以下代码行的电子邮件参数:
p = (unsigned char)random();
Run Code Online (Sandbox Code Playgroud)
随机函数返回一个long,有人说这是不安全的,因为类型转换可能需要MSB而不是LSB.我知道在x86上,类型转换将返回LSB,但是我找不到任何关于这是否实际上由ANSI C强制要求的信息,或者它是否是那些特定于实现的"未定义行为"之一.
这在C标准中规定.
6.3.1.3p2中的C99说:
"否则,如果新类型是无符号的,则通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内."
在二进制补码系统中,它意味着取最低有效位.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |