首页 > 编程知识 正文

c语言strcat,c语言浮点数转换整数

时间:2023-05-05 17:06:38 阅读:26706 作者:1099

最近写数字运算的程序。 从FPGA获取的是固定点数、15位,最高位的bit14为符号位,bit13为整数位,低位的13位为小数。 另一方面,我的运算过程使用了浮点数。 经过一系列计算后,需要将计算结果作为常数点写入寄存器。 因此,首先需要编写常量点和浮点数相互转换的函数。

首先,明确固定点数和浮点数的概念。

决定积分数

定数点是小数点固定的数字。 计算机没有表示小数点的位数。 小数点的位置是默认的。 一般固定在机器数量的最低位之后,或者符号位之后。 前者称为定点纯整数,后者称为定点纯小数。

例题:用8位原代码表示定点整数(100 ) 10

(100 ) 10=(1100100 ) 2

定点整数是

例题:用8位原码表示定点纯小数(-0.6875 ) 10

(-0.6875 ) 10=(-0.1011 ) 2

定点纯小数表示如下

常数点表示法简单直观,但数值表示的范围太小,运算时容易发生溢出。

浮点数字

浮点数是小数点位置可以变动的数。 为了增大数值显示范围以防止溢出,采用了浮点表示法。 浮点表示类似于十进制的科学计数法。

在计算机中,浮点数通常分为阶码和尾数两部分来表示。 其中,阶码通常用补数定点整数表示,尾数通常用补数或原码定点小数表示。 为了不破坏有效数字,归一化尾数的处理(也就是所谓的科学记数法)确保尾数的最高位是1,而实际数值通过步进码被调整。

常用浮点数在机器上的格式为:

阶符号表示指数的已编码比特,阶符号表示幂,整数符号表示尾数的已编码比特,并且尾数表示标准化的小数值。

N=尾数基数阶码(指数) )

例题:二进制-110101101.01101可以写为- 0.1101011010121001

这几个机器上的格式是。 (步骤代码用8表示,尾数用24位表示) ) ) )。

c语言代码的实现如下:

/* * * * * * * * * * * * * * * * * *

*函数名称: BspFixToDou

*功能说明:将指定的点数转换为浮点数

*算法说明:无

*输入参数: ucType 0无符号1表示有符号

* ucInteger指示整数占多少位

* ucdecimal表示小数占多少位

* llfix是要转换的点数

*无输出参数:

*无返回值:

* * * * * * * * * * * * * * * * *

voidbspfixtodou(ucharUCtype、UCHAR ucInteger、UCHAR ucdecimal、UINT64 llfix、DOUBLE *pdbRet ) )。

{

uint64lltemp=llfix (() ) ) ) (uint64 ) )1) ) ) )。

if(0==llfix ) ) )。

{

*pdbRet=0.0;

}

(if(lltemp () (uint64 ) )1) ) ) ) ) ) )。

{

* pdb ret=-(双精度) ) ) ) ) (UINT64 ) )1) ) ) ) )。

}

else /*无符号数或有符号数的正数*/

{

* pdb ret=(双) (双) lltemp/(双) ) UINT64 ) 1

}

}

/* * * * * * * * * * * * * * * * * *

*函数名称: BspDouToFix

*功能说明:将指定的浮点数转换为固定点数

*算法说明:无

*输入参数: ucType 0无符号1表示有符号

* ucInteger指示整数占多少位

* ucdecimal指示小数占多少位

* dbDou是要转换的浮点数

*无输出参数:

*返回值:转换后的固定点数

* * * * * * * * * * * * * * * * *

voidbspdoutofix(ucharUCtype、UCHAR ucInteger、UCHAR ucdecimal、DOUBLE dbDou、UINT64 *pllfix ) )。

{

UINT64 lltemp=0;

双数据库模板=0;

dbtemp=dbDou;

if(dbtemp0)/*有符号正数或无符号数(/

{

lltemp=(uint64 ) (-dbDou*(1) 1

*

}

ELSEif(dbtemp0)/*带符号的负数) /

{

*PLLfix=(uint64 ) ) dbdou*(1

}

else

{

*pllfix=0;

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。