关于long类型存储位数的疑问

2019-08-03 22:13发布

今天编译自编程序时发现输出与期望结果不一致,一步步调试发现与long类型有关,于是写了小测试程序:右边是watch window对result的监控值,
void main()                                             //                   Watch window (result)           
{                                                            //
  int a=-1,b=1;                                                                       
  long result = -1;                                  //      1099511627775d(0x000000FFFFFFFFFF)
  result = a*(-1);                                   //                 1
  result = a*1;                                        //                 -1
  result = b*(-1);                                    //                 -1
  result =1*(-1);                                   //       1099511627775d(0x000000FFFFFFFFFF)
  result = -1+1;                                    //                  0
  result = -1+b;                                   //                  0
  result = -1+a;                                   //                 -2
  result = (-1)*(-1);                            //                 1
}
这样的结果让我很不解,初步认为是由于long类型在CCS for C6000中寄存器存储位数是40位而在watch window中是以64位解析造成的,希望有朋友们给个确切答案。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。