op_2rr = 2*R[0]*R[0];运算出现意想不到的结果,为什么?
我的程序里面:
op_2rr = 2*R[0]*R[0];出现了错误的结果。
#define uint32 unsigned long int
#define uint16 unsigned int
#define uint8 unsigned char
void draw_Pieslice(uint16 x, uint16 y, uint16 R_out, uint16 R_in,uint32 stangle, uint32 endangle, uint8 color)
{
……
uint8 R[2]={R_out,R_in},Lx1[2]={0},Ly1[2]={0},Lx2[2]={0},Ly2[2]={0};
for ( i = 0; i < 2; i++)
{
op_2rr = 2*R[0]*R[0];
……
}
}
调用:
draw_Pieslice(300, 300,200, 50,30, 80,0xFC);
本来R[0]=200;
这样的话 op_2rr = 2*R[0]*R[0];应该等于:80000 可是出来的结果却是:14464
我去掉2倍:cccc=R[i]*R[i]; 应该是:40000 结果却是:-25536
我换成这个:
ddd1=R[i];
ddd2=ddd1*ddd1;
i=0时:ddd2=4000 结果正确。
变量类型长度是够的 为什么会出现这种错误呢?有谁能告诉我
[解决办法]
80000 - 65536 = 14464
40000 + 25536 = 65536
[解决办法]
op_2rr = 2 * (uint32)R[0] * (uint32)R[0];
要不这样试试?
[解决办法]
uint8 R[2]={R_out,R_in}, 这种写法也不太好,形参直接传给数组的初始化。最好先定义,后把形参赋值给数组变量吧,局部变量的初始化不是那么好用的。