arm平台上负的浮点数不能转换成整形?

该账号已经存在 2018-02-05 04:12:31

#include <stdio.h>

void main(int argc ,char** argv )
{
if(argc > 0){

float a = -1266.00;
unsigned long dvalue = a;
printf("float a= %f \n unsigned long long dvalue = %x \n",a,dvalue);
unsigned long dd_h = (unsigned long) (dvalue >> 32);
unsigned long dd_l = (unsigned long) (dvalue & 0x00000000FFFFFFFF);
printf("dd_h=%d dd_l=%d \n",dd_h,dd_l);

a = 1266.00;
dvalue = (unsigned long long)(a);
printf("float a= %f \n unsigned long long dvalue = %llu \n",a,dvalue);
dd_h = (unsigned long) (dvalue >> 32);
dd_l = (unsigned long) (dvalue & 0x00000000FFFFFFFF);
printf("dd_h=%d dd_l=%d \n",dd_h,dd_l);

dvalue = pow(2,64);
dd_h = (unsigned long) (dvalue >> 32);
dd_l = (unsigned long) (dvalue & 0x00000000FFFFFFFF);
printf("dvalue=%llu dd_h=%lu dd_l=%lu \n",dvalue,dd_h,dd_l);

int ab = -123;
unsigned b = (unsigned int)ab;
int c = b;
int d = (int)b;
printf("a=%d b=%u b=%X c= %d d=%d \n",ab,b,b,c,d);
}
return ;
}


gcc编译后输出-1266.00可以强制转换为无符号整形
book@ubuntu:datafromat$ gcc main.c
book@ubuntu:datafromat$ ./a.out
float a= -1266.000000
unsigned long long dvalue = fffffb0e
dd_h=-1266 dd_l=-1266
float a= 1266.000000
unsigned long long dvalue = 577733986768389362
dd_h=1266 dd_l=1266
dvalue=18446744073709551615 dd_h=4294967295 dd_l=134514176
a=-123 b=4294967173 b=FFFFFF85 c= -123 d=-123

交叉编译到arm平台就-1266.00就不能强制转换成整形了
book@ubuntu:datafromat$ arm-linux-gcc main.c
LEC-3071[local]# ./a.out
float a= -1266.000000
unsigned long long dvalue = 0
dd_h=0 dd_l=0
float a= 1266.000000
unsigned long long dvalue = 157608119895282
dd_h=0 dd_l=1266
dvalue=18446744069414584320 dd_h=1266 dd_l=36696
a=-123 b=4294967173 b=FFFFFF85 c= -123 d=-123
LEC-3071[local]#

编译时有哪个选项需要设置?
...全文
779 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2018-02-06
  • 打赏
  • 举报
回复
注意数据位宽 unsigned long long dvalue = a; /*unsigned long dvalue = a;*/
w22net 2018-02-05
  • 打赏
  • 举报
回复
确实奇怪,有平台我也测试下

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧