主题中讨论的其他部件:MSP430FR5989
工具/软件:TI C/C++编译器
IDE:CCS 6.1 IDE/CS 7.1
编译器:TI v 4.4 .3/TI 16.9 v.1.LTS
测试程序如下所示:
----------------
INT MAIN ()
{
无符号字符I;
无符号长num_32;
对于(i=0;i<50;+I)
{
num_32 = 0x8823 * i;
DEBUG_SEND_STRING_l (&num_32,4); //输出结果
}
返回0;
}
----------------
输出为:
-----------
00 00 00 00 00
23 88 00 00 00
46 10 00 00 00
69 98 00 00 00
8C 20 00 00 00
AF A8 00 00 00
.....
--------
但预期的结果是
--------
00 00 00 00 00
23 88 00 00 00
46 10 01 00
69 98 01 00
8C 20 02 00
AF A8 02 00
....
--------
如果我将表达式更改为"num_32 = 0x8823 *(unsigned long) i;",程序工作正常。
我认为这可能是因为编译器使隐式类型转换仅基于源操作数,而不考虑结果。
无符号整数类型可以同时包含0x8823和I,因此编译器将它们转换为无符号整数类型,但不认为num_32是无符号长型的数字,
我还在CodeBlocks 10.5 和Visual Studio 2005 SP1中对该程序进行了补充,该程序按预期运行。
如果它是编译器的错误,我希望它能得到修复。