This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28375D:Int16/Int32乘以“-1”

Guru**** 2433160 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1176544/tms320f28375d-int16-int32-multiplication-by--1

器件型号:TMS320F28375D

我们对用“-1”乘以 Int16/Int32有疑问,但用最小负数给出:

此 CPU 限制还是编译器错误导致的值未更改?

 

电源

在 limits.h 中、我们有16位的最小值:

 

define #define SHrT_MIN     (-SHrT_MAX-1)     //短整型的最小值             *

define #define SHrT_MAX            32767      //短整型的最大值             */

 

对于32位:

 

 

#define INT_MIN        (-INT_MAX-1)    /* INT 的最小值               */

#define INT_MAX        2147483647      // INT 的最大值                

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="100788" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1176544/tms320f28375d-int16-int32-multiplication-by--1 "]是不会更改结果值的 CPU 限制或编译器错误?

    但是、您期望得到什么结果?

    我希望您可以看到 val = val *-1的结果可能是意外的、因为它的值超过了 lcl_dwnld_shrt_dsc>最大值。 即-32768 x -1 = 32768、但32768大于32767、因此无法存储"常用"的纸张结果。 问题是:在这种情况下、您希望 CPU 执行什么操作?

    如果 val = val *(-1)、编译器将使用 NEG Ax 指令。 在 CPU 指令手册中、它说如果初始值为-32768 (0x8000)、则结果不变、但指示溢出。

    因此没有错误。 您看到的行为是 CPU 定义的行为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Kier、

    谢谢! 这会将其清除。

    Jason