微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > a(long)*b(long)=c(long long)为什么不对啊?

a(long)*b(long)=c(long long)为什么不对啊?

时间:10-02 整理:3721RD 点击:
尊敬的老师:
我用两个long型数a*b相乘,为什么结果c(long long型)不对啊?不是说long long型数可以表示64位的吗?这是怎么回事啊?如果必须用c语言做32位*32位怎么办啊?谢谢!

先看看编译器是否支持long long数据类型,请查看相应的DSP文档。

可以定义long long型数据啊,但是定义出来的数据超过2^32就错误了!

定义是可以定义,关键是查看文档long long代表多少个bit, 可以看看你所用的芯片的DSP Programmer\'s Guide
例如c55x系列的long long是40bit, 而c6000的是64bit.
用sizeof也可以得知。

我用的是2808,听说28系列的 long long型是64位的!

:
问题:我定义了long long   K4,K5,K6,K7;但是,当我运算K5=K4+2时,结果是(K5=1;寄存器ACC=1,P=1;XT=0),出错误!

#include \"DSP280x_Device.h\"     // DSP280x Headerfile Include File
#include \"DSP280x_Examples.h\"   // DSP280x Examples Include File
       
void        error();
long        K1,K2,K3;
long long   K4,K5,K6,K7;
                     
void main(void)
{

   InitSysCtrl();
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();

   K1=2147483647;//31 (2^31-1)
   K2=2147483647;//31 (2^31-1)
   K3=2147483647;//31( 2^31-1)
   K4=4294967295;//32 (2^32-1)
   K5=K4+2;//33 ????出错误!
   K6=K5+1;//????出错误!

   EINT;   // Enable Global interrupt INTM
   ERTM;   // Enable Global realtime interrupt DBGM

   for(;

;

}

void error(void)
{
    asm(\"     ESTOP0\"

;         //Test failed!! Stop!
    for (;

;
}

我用的是2801的,CCS3.1环境
我也是这样的问题啊,我的编译通不过LONG LONG 型的数据,
请问一下我该如何做才能定义一个变量为64位的.编译器不支持那该如何做能使编译器支持呢?

谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top