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

benf   2007-12-31 13:03 楼主
尊敬的老师:
  我用两个long型数a*b相乘,为什么结果c(long long型)不对啊?不是说long long型数可以表示64位的吗?这是怎么回事啊?如果必须用c语言做32位*32位怎么办啊?谢谢!

回复评论 (6)

先看看编译器是否支持long long数据类型,请查看相应的DSP文档。
点赞  2007-12-31 14:12

可以定义long long型数据啊

可以定义long long型数据啊,但是定义出来的数据超过2^32就错误了!
点赞  2007-12-31 14:27
定义是可以定义,关键是查看文档long long代表多少个bit, 可以看看你所用的芯片的DSP Programmer\'s Guide
例如c55x系列的long long是40bit, 而c6000的是64bit.
用sizeof也可以得知。
点赞  2007-12-31 14:50

祝红岩若愚老师新年快乐!(还想请教)

我用的是2808,听说28系列的 long long型是64位的!
点赞  2008-1-1 02:48
:
问题:我定义了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 (;;
}
点赞  2008-1-2 03:32

红岩若愚老师:我的编译通不过LONG LONG 型的数据,

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

谢谢
点赞  2008-1-11 13:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复