尊敬的工程师:
您好,我在常数运算的时候(为了程序易读,就把运算过程写出来)一个奇怪的现象,不知道是TI编译器的Bug,还是TI编译器的规定。如下运算:
unsigned int data = 0;
data = ((20480*2)/8) – 1;
以上得出data的结果竟然是62463。正确结果应该是5119.
如果是如下表达式:
data = ((40480*2)/8) – 1;
这时得出的结果又是正确的。
不知道是不是Bug,还是TI的编译器在运算的时候对有符号数还有无符号数是有默认的判断规则?那么第二个式子其实中间结果40480*2已经超出了16位无符号数的上限,为什么又能计算正确呢?我使用的芯片是TMS28377S,是不是芯片运算的问题呢?有可能编译器并没有优化这部分。
谢谢!
祝您好心情!
Susan Yang:请问您现在使用的是什么芯片?
针对您的情况我测试一下后给您反馈
尊敬的工程师:
您好,我在常数运算的时候(为了程序易读,就把运算过程写出来)一个奇怪的现象,不知道是TI编译器的Bug,还是TI编译器的规定。如下运算:
unsigned int data = 0;
data = ((20480*2)/8) – 1;
以上得出data的结果竟然是62463。正确结果应该是5119.
如果是如下表达式:
data = ((40480*2)/8) – 1;
这时得出的结果又是正确的。
不知道是不是Bug,还是TI的编译器在运算的时候对有符号数还有无符号数是有默认的判断规则?那么第二个式子其实中间结果40480*2已经超出了16位无符号数的上限,为什么又能计算正确呢?我使用的芯片是TMS28377S,是不是芯片运算的问题呢?有可能编译器并没有优化这部分。
谢谢!
祝您好心情!
yongtao ma59:
回复 Susan Yang:
Yang工,您好,我使用的是28377S,谢谢!
尊敬的工程师:
您好,我在常数运算的时候(为了程序易读,就把运算过程写出来)一个奇怪的现象,不知道是TI编译器的Bug,还是TI编译器的规定。如下运算:
unsigned int data = 0;
data = ((20480*2)/8) – 1;
以上得出data的结果竟然是62463。正确结果应该是5119.
如果是如下表达式:
data = ((40480*2)/8) – 1;
这时得出的结果又是正确的。
不知道是不是Bug,还是TI的编译器在运算的时候对有符号数还有无符号数是有默认的判断规则?那么第二个式子其实中间结果40480*2已经超出了16位无符号数的上限,为什么又能计算正确呢?我使用的芯片是TMS28377S,是不是芯片运算的问题呢?有可能编译器并没有优化这部分。
谢谢!
祝您好心情!
yongtao ma59:
回复 Susan Yang:
谢谢Yang工,您的意思是说直接加L就可以避免,谢谢!
尊敬的工程师:
您好,我在常数运算的时候(为了程序易读,就把运算过程写出来)一个奇怪的现象,不知道是TI编译器的Bug,还是TI编译器的规定。如下运算:
unsigned int data = 0;
data = ((20480*2)/8) – 1;
以上得出data的结果竟然是62463。正确结果应该是5119.
如果是如下表达式:
data = ((40480*2)/8) – 1;
这时得出的结果又是正确的。
不知道是不是Bug,还是TI的编译器在运算的时候对有符号数还有无符号数是有默认的判断规则?那么第二个式子其实中间结果40480*2已经超出了16位无符号数的上限,为什么又能计算正确呢?我使用的芯片是TMS28377S,是不是芯片运算的问题呢?有可能编译器并没有优化这部分。
谢谢!
祝您好心情!
Susan Yang:
回复 yongtao ma59:
是的,您可以测试一下