请看看下面的代码:隐式铸造浮动常数
#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;
}
它给作为输出:
sizeof(short) = 2
s = 160
s = 160
s = 160
s = 32767
在最后一行为什么它是32767,而不是160?说f = 65696.0F; s = f;
和s = 65696.0F;
有什么区别?
+1。具体而言,6.3.1.4/1:*“当实际浮点类型的有限值被转换为除_Bool以外的整数类型时,小数部分被丢弃(即该值被截断为零)。如果整数部分不能用整数类型表示,行为是不确定的)“* – Jon 2013-02-08 14:21:32
@Jon为什么当我说'f = 65696.0F; s = f'? – rootkea 2013-02-08 14:22:40
@rootkea这是未定义的行为,以及是未定义的行为可能是不可预测的。 – ouah 2013-02-08 14:24:31