打印

关于RVDS浮点数转无符号数的问题。

[复制链接]
1307|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ok2222991|  楼主 | 2012-8-7 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ok2222991 于 2012-8-7 11:33 编辑

#include <stdio.h>
void fun()
{
float fset;

short s;
unsigned short us;

int i;
unsigned int ui;

int iset;

fset = -1.0;

s = fset;
us = fset;
i = fset;
ui = fset;

printf("f = %.2f, s = %d, us = %d, i = %d, ui = %d\n", fset, s, us, i, ui);

iset = -1;

s = iset;
us = iset;
i = iset;
ui = iset;

printf("iset = %d, s = %d, us = %d, i = %d, ui = %d\n", iset, s, us, i, ui);
}
int main(void)
{
    fun();
}

相关帖子

沙发
ok2222991|  楼主 | 2012-8-7 11:31 | 只看该作者
在RVDS中运行上面的程序,浮点数为负数的时候,浮点数转为无符号数,无符号数为0.

f = -1.00, s = -1, us = 0, i = -1, ui = 0
iset = -1, s = -1, us = 65535, i = -1, ui = -1

而用gcc和VC编译的结果是:

f = -1.00, s = -1, us = 65535, i = -1, ui = -1
iset = -1, s = -1, us = 65535, i = -1, ui = -1

有人能解释一下这是什么原因么?

使用特权

评论回复
板凳
xinzha| | 2012-8-7 16:48 | 只看该作者
rvds的什么版本?似乎对short,int,us和ui的处理完全是两种方式,一种是简单的内存取值处理,一种是做了数值的转换。建议楼主用%x打印这些数据,ui在这种情况下可能显示0xbf800000,如果是的话,就是armcc对不同数据类型采取了不一样的策略。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

22

帖子

0

粉丝