C中的无符号转换在x86上可以正常工作,但在ARM上不起作用

问题描述 投票:0回答:1

我在ARM处理器上运行C程序时遇到问题。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float f = -40.000000;
    unsigned int a = f;

    printf("\t Actual TX Power = %0.2f dBm \n",
         (double)(int)a);

    return 0;
}

输出:

on x86-        Actual TX Power = -40.00 dBm
on ARM-        Actual TX Power = -0.00 dBm

该值在x86上可以承受往返行程,但在ARM上不能幸免。

我无法找出问题所在。这可能是其背后的原因。

c gcc x86 arm portability
1个回答
0
投票

您的f是有符号的值,因此将通过加UINT_MAX + 1将其转换为无符号的整数,然后将使用无符号的值进行加法。

© www.soinside.com 2019 - 2024. All rights reserved.