【发布时间】:2014-11-26 03:10:50
【问题描述】:
#include<stdio.h>
main()
{
short int b = (short int)(((-100) * (1UL << 6)) - 0.5);
short int c = (short int)( (-6400) - 0.5 );
printf("%d",sizeof(short int));
printf("\n%d",b);
printf("\n%d",c);
}
输出:
b : 32767
c : -6400
为什么我得到不同的结果? 这是因为类型转换吗?
由于我无法在此处放置确切的代码副本,因此我编写了在键盘中显示警告的部分并将其粘贴到此处。 我正在使用 Posek 编译器。 上述表达式用于其中一种配置。当我在 Trace32 中运行代码时,我知道它获得了值“-1”。我不明白“-1”这个值是怎么来的?
编译器正在显示:
警告:浮点溢出
【问题讨论】:
-
我的意思是有符号数和无符号数之间的算术转换。
-
您的标题提到了“浮点溢出”警告。这是编译时警告吗?
-
我很好奇您使用的是什么编译器,我没有看到使用
gcc或clang的类似警告。 -
@KeithThompson 是的,它是一个编译时警告。
-
@ShafikYaghmour 我正在使用posek编译器。及其赋予值“-1”
标签: c floating-point type-conversion