roo*_*kea 10 c floating-point casting
请看一下这段代码:
#include <stdio.h>
int main(void)
{
short s;
int i = 65696;
float f = 65696.0F;
printf("sizeof(short) = %lu\n", sizeof(short));
s = i;
printf("s = %hd\n", s);
s = f;
printf("s = %hd\n", s);
s = 65696;
printf("s = %hd\n", s);
s = 65696.0F;
printf("s = %hd\n", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给出了输出:
sizeof(short) = 2
s = 160
s = 160
s = 160
s = 32767
Run Code Online (Sandbox Code Playgroud)
在最后一行为什么它是32767而不是160?说f = 65696.0F; s = f;和之间有什么区别s = 65696.0F;?
oua*_*uah 13
因为如果浮点值的整数部分在新类型中不可表示,则转换是未定义的行为.
在你的情况下,SHRT_MAX可能是32767,因此65696.0F在short对象中不能表示其组成部分.
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |