今天编译自编程序时发现输出与期望结果不一致,一步步调试发现与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位解析造成的,希望有朋友们给个确切答案。 |