使用C&;的意外除法/乘法行为;恒星发射台

使用C&;的意外除法/乘法行为;恒星发射台,c,C,今天发生了奇怪的事情。出于某种奇怪的原因,我无法使值的除法或乘法有效,甚至在将值写入变量后读取值也不起作用。下面是有问题的代码片段: void Turning(heading,desiredheading){ //Boats heading too high if (heading>desiredheading){ if ((heading - desiredheading) <10 ){ g_ulServoPulse[1]=makeAngle(5);

今天发生了奇怪的事情。出于某种奇怪的原因,我无法使值的除法或乘法有效,甚至在将值写入变量后读取值也不起作用。下面是有问题的代码片段:

void Turning(heading,desiredheading){
//Boats heading too high

if (heading>desiredheading){
    if ((heading - desiredheading) <10 ){
        g_ulServoPulse[1]=makeAngle(5);
        g_ulServoPulse[2]=makeAngle(5);
    }else if((heading - desiredheading) <54 ){
        g_ulServoPulse[1]=makeAngle(27);
        g_ulServoPulse[2]=makeAngle(27);
    }else{
        g_ulServoPulse[1]=makeAngle((heading-desiredheading)*0.5);
        g_ulServoPulse[2]=makeAngle((heading-desiredheading)*0.5);

    }
//Boat is heading too low
}else if(desiredheading > heading){
    if ((desiredheading -heading) < 10 ){
        g_ulServoPulse[1]=makeAngle(-5);
        g_ulServoPulse[2]=makeAngle(-5);
    }else if ((desiredheading -heading) < 54 ){
        g_ulServoPulse[1]=makeAngle(-27);
        g_ulServoPulse[2]=makeAngle(-27);
    }else{
        g_ulServoPulse[1]=makeAngle((desiredheading-heading)*-0.5);
        g_ulServoPulse[2]=makeAngle((desiredheading-heading)*-0.5);}
        int temp = desiredheading-heading;
        //temp = temp ;
        UARTprintf("Wasp\n");
        UARTprintf("%d\n", desiredheading);
        UARTprintf("%d\n", heading);
        UARTprintf("%d\n", (desiredheading-heading));
        UARTprintf("%d\n", temp);

//Boat is Just right
}else{
    g_ulServoPulse[1]=makeAngle(0);
    g_ulServoPulse[2]=makeAngle(0);
    UARTprintf("Table\n");
}
}
我看不出第二个和最后一个输出有什么不同。这只是为了输出温度,正如前面提到的,乘法和除法也存在同样的问题

任何关于:为什么会发生这种情况以及如何解决它的见解都将不胜感激

干杯

编辑: 很明显,有一种奇怪的迂回方法可以让它正常工作

int temp = desiredheading-heading;
temp &= 0xFF ;

使其正确返回。虽然我完全不知道为什么会这样,或者是什么导致了最初的行为

我真的认为显示的代码和给出的结果之间存在脱节

UARTprintf("%d\n", temp); --> 1074266112
这恰好是您将得到的结果,即您的格式和数据类型不匹配。
(由于@Daniel Fischer反馈而应用的更正)

请仔细检查temp、标题和desiredheading的类型。 此外,temp是否通过“int temp=desiredheading;”真正声明和计算?
“UARTprintf(“%d\n”,temp);”中的temp看起来确实是双精度的


公平风

我真的认为显示的代码和给出的结果之间存在脱节

UARTprintf("%d\n", temp); --> 1074266112
这恰好是您将得到的结果,即您的格式和数据类型不匹配。
(由于@Daniel Fischer反馈而应用的更正)

请仔细检查temp、标题和desiredheading的类型。 此外,temp是否通过“int temp=desiredheading;”真正声明和计算?
“UARTprintf(“%d\n”,temp);”中的temp看起来确实是双精度的


Fair winds

desiredheading和heading的类型是什么?打印出来的输出是否(准确地)对应于您帖子中的代码段?类型应默认为int。如果
desiredheading
和/或
heading
是指针,而不是
float
int
等,这可以解释这种行为…嗨,伙计们,为快速反馈干杯。Desiredheading/Heading是int输入,是的,输出与代码段完全对应。不过我已经找到了一个迂回的解决方案,我将简短地更新主帖子desiredheading和heading的类型是什么?打印出来的输出是否与您帖子中的代码片段(精确地)对应?类型应默认为int。如果
desiredheading
和/或
heading
是指针,而不是
float
int
,等等,这可以解释这种行为……大家好,为快速反馈干杯。Desiredheading/Heading是int输入,是的,输出与代码段完全对应。不过,我已经找到了一个迂回的解决方案,我将很快更新主要帖子
UARTprintf("%d\n", 3.0);  --> 1074266112 = 0x40080000
UARTprintf("%d\n", 30.0); --> 1077805056 = 0x403E0000