文档库 最新最全的文档下载
当前位置:文档库 › c++将字符串转为数字——整型浮点型通用

c++将字符串转为数字——整型浮点型通用

c++将字符串转为数字——整型浮点型通用
c++将字符串转为数字——整型浮点型通用

注:没有编译过,若要复制可能需要改动内容。

此段代码,仅提供逻辑参考!

double strTodouble(char *string)

{

String str = string;

String strDes;

//判断是否含有非法字符

if (*string == '+' || *string == '-')

strDes = str.substr(1);

else

strDes = str;

If(strDes.SpanIncluding(“+-0123456789.”) != strDes)

{

cout<<”非法的数值,无法转换”<

return 0; //包含其他非数字字符,则非法

}

char *p ;

if (*string == '+' || *string == '-') //带正负号的数,从第二个字符开始计算p = string+1;

else if (*string >='0' && *string <= '9' ) //不带正号的正数

p = string;

double m = 0 , t;

while(*p && (*p != '.'))//处理整数部分

{

m = m*10 + (*p-'0');

p++; //移动指针

}

if(*p == '.') //存在小数的情况

{

p++; //略过小数点

while(*p) //处理小数部分,直到字符串结束

{

int n = 0;

n - -;

t = pow(10.0 , n)

m += (*p-'0')*t;

}

}

if (*string == '-') //负数

m = 0-m;

return m;

}

C语言学习2之字符串及输入输出

C语言学习2之字符串及输入输出 语言学习 字符串及输出和输入 :不像我们之前学到的整型,浮点型等数据那样,没有为字符串定义专门的变量类型,一般情况下将字符串放在字符数组中。下 “ * <> <> " "宏定义一个字符串 ()

{ (" () \"()); (" () \"()); } 程序 程序运行的结果如图所示: 图:程序运行结果 () \” * 函数名: 输入参数:无 输出参数:无 调用:()

被调用:无 功能:求取字符串中字符的个数 * <> <> \"(""))。而()只是一个关键字,它是用来求某一数据类型所占的字节数的;.我们可以通过宏定义的方式来定义一段字符串。其实我们还可以有另一个方法来定义一个字符串变量: [] " ." 下面我们来具体比较下()和的区别,看程序: *

函数名: 输入参数:无 输出参数:无 调用:(), () 被调用:无 程序运行的结果如图所示:

图:程序运行结果 从程序运行的结果我们可以看出()求的是数组的大小,因为我们定义的是包含个字符元素的数组,而一个字符的大小为个字节,所以该数组的大小为;()求的是该数组中字符串所包含的字符的个数(包括空格),所以其大小为. 标志 五种标志的具体具体作用如表所示: 标志意义 项目左对齐。也就是说将项目打印在 字段的左侧开始处。 有符号的数若为正则在数字前加 “”,若为负则加“” 空格有符号数若为正则在数字前加一

个空格,若为负则在数字前加 “” 和会打印出八进制和十六进制的 的前缀。对于浮点型数据,即使 没有数字,也会打印一个小数点 用前导代替空格来填充字段宽 度。如果标志与精度说明符同时 出现那么标志被忽略 表:()种标志 :用反斜杠和回车的方式。例如: (“ \ .\”) .采样字符串连接的方法。例如:

浮点算法转换成硬件定点算法中的问题

浮点算法转换成硬件定点算法中的问题 回北京航空航天大学唐清贵夏宇闻 引言 DSP和FPGA是信号处理工程设计领域发展最快的两个分支G目前9它们的应用非常普及9但是要开发出占用资源少9运行速度快的高质量硬件体系结构比较困难G 在通常情况下9算法的硬件实现都需要采用定点运算并考虑并行结构G 但是在实际的许多应用中9比如图像处理\语音压缩等9需要进行大量复杂的数据运算9而且对数据的精度及动态范围都要求比较高9所以9算法模型大多都以浮点数为基础G另一方面9浮点算法在硬件实现上有相当大的难度9不仅占用的系统资源较多9而且硬件运行的速度也较慢9在很多场合下不能很好地满足系统实时性的要求G因此9电子工程师为了提高系统的性能9一般都会先对浮点算法进行仔细的分析9结合工程的实际要求9综合考虑诸多因素9然后再将其转化为定点算法并通过硬件来实现G 因此9如何使转化后的算法在硬件上能正确地运行是设计开发人员特别关心的问题G解决该问题的唯一途径就是使处理后的数据保持系统要求的精度和动态范围9否则就会因为数据处理不当9使系统产生莫名奇妙的故障9从而导致系统的失败G在遇到此类问题时9务必要谨慎对待9以免造成不可估量的损失G 1浮点与定点运算的比较 在开发过程中9必须要对应用的数据精度及动态范围有清楚的认识9并在开始设计硬件结构前9先进行算法定点化的研究工作9严格按照工程设计的实际需求在数学运算上对算法进行数字定点化处理并计算验证G只有这样9才能保证最终设计的硬件体系结构产生的运算结果符合设计需求G 为了更好的说明如何成功的完成浮点算法向定点算法的转化9首先对浮点数和定点数进行简要回顾G 浮点数由三部分组成C指数部分\尾数部分和符号位9如图l所示G图l中T\l分别为指数和尾数的位宽9浮点 数据的数值U f p 表示为C U f p =(_l)S"U s"Z U e 其中9S为符号位的值9U s为尾数的数值9U e是指数的数值G在I EEE754标准中9单精度浮点指数位数为89尾数位数为Z39还有l位符号位G数据绝对值最小可以是Z.O>l O-389最大可以是Z.O>l O+389双精度浮点指数位数为l l9尾数位数为5Z9同样也有l位符号位G数据绝对值最小可以是Z.O>l O-3O89最大可以是Z.O>l O+3O8G 定点数的表示方法和浮点数相对应9数据直接用二进制表示9且小数点在数据的位置固定G和浮点数相比9它的运算简单9没有浮点数尾数对齐和归一化问题G因此9在硬件上实现以定点数为基础的算法占用的面积少\性能高9故定点运算是信号处理硬件实现中最常用的一种方式G但是9由于定点数表示的范围远远小于浮点数9所以在实现过程可能会有许多的隐患9如在运算过程中9经常会碰到溢出问题和病态方程等问题G 2精度处理策略 根据上面的分析9可以看到9浮点算法与定点算法主要的不同之处在于算法中的数据精度和动态范围G因此9只要解决了转化后由于数据的精度和动态范围减小引起的问题9那就等于解决了算法的转化问题G 目前9为了保证转化后的算法能正确地实现系统功能9对数据精度处理的方法主要有舍弃最低位和采用最大字长等G前者以损失精度来保证计算中的无溢出9但是得到的结果往往与实际值有一定的差距9从而使系统在很多情况下不能稳定地运行S后者通过应用分析找出所需数据的最大字长(该字长为运算中精度无损失条件下数据的长度)9然后再以最大字长的方式进行算法中所有数据的运算9该方法虽然保证了计算结果的正确和精度9但是它的缺点在于造成了资源的巨大浪费9限制了硬件运行速度的提高9因为实现算法中的某些运算所需的字长远远小于最大字长G最佳的转化应该是使处理后算法中的数据既能 图 1 Z OO5.lZ M icrocontrollers Embedded S y ste ms75

微机原理实验五字符及字符串的输入输出

实验五字符及字符串的输入输出 一、实验目的 1. 学会编写简单的字符、字符串输入输出程序。 2. 掌握几种常用的DOS 系统功能调用。 二、实验环境 1. 硬件:PC 微机 2. 软件:Masm for Windows 汇编集成开发环境 三、实验讲义 1. 系统功能调用是MS-DOS 为程序员编写汇编语言源程序提供的一组子程序,包括设备管理、文件管理和目录管理等。它规定使用软中断指令INT 21H 作为进入各功能子程序的总入口,再为每个功能调用规定一个功能号,引用功能号即可进入相应的子程序入口。 使用方法: (1)传送入口参数到指定的寄存器中,有的子程序不需要入口参数; (2)把要调用功能的功能号送入AH 寄存器中; (3)用INT 21H 指令转入子程序入口; (4)相应的子程序运行结束后,可以按照规定取得出口参数,一般给在寄存器中。 常用系统功能调用的功能号有 1,10(0AH),2,9,4CH 五种: (1)键盘输入单字符——1 号系统功能调用格式: MOV AH,1 INT 21H 功能:系统等待键盘输入,将键入字符的ASCII 码送入AL 寄存器中,并通过显示器显示该字符。 (2)键盘输入字符串——0A 号系统功能调用格式: LEA DX,缓冲区首地址MOV AH,0AH INT 21H 功能:将键盘输入的字符串写入内存单元中。 (3)输出单字符——2 号系统功能调用格式: MOV DL,’单字符’/ASCII 码MOV AH,2 INT 21H 功能:将单个字符通过屏幕显示出来。将要显示的字符或者其ASCII 码先存入寄存器DL 中,再调用2 号系统功能调用。 (4)输出字符串——9 号系统功能调用格式: LEA DX,字符串首地址 MOV AH,09H INT 21H 功能:将指定的内存缓冲区中的字符串从显示器显示输出,注意字符串以字符’$’作为结束标志。 (5)返回操作系统——4CH 号系统功能调用格式:MOV AH,4CH INT 21H 功能:在用户程序结束处插入此调用,则返回到DOS 操作系统,显示器显示系统提示符。 四、实验内容 1. 从键盘输入一个大写字母,屏幕上输出其相应的小写字母。(大写字母 A-Z 的ASCII 为41H-5AH;小写字母a-z 的ASCII 码为61H-7AH)

浮点转定点计算

一DSP定点算数运算 1 数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以16位字长为例。 DSP芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,l则表示数值为负。其余15位表示数值的大小。因此, 二进制数0010000000000011b=8195 二进制数1111111111111100b= -4 对DSP芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。那么是不是说DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。 从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如, 16进制数2000H=8192,用Q0表示 16进制数2000H=0.25,用Q15表示 但对于DSP芯片来说,处理方法是完全相同的。 从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0 的数值范围是一32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。 浮点数与定点数的转换关系可表示为: 浮点数(x)转换为定点数(xq):xq=(int)x* 2Q 定点数(xq)转换为浮点数(x):x=(float)xq*2-Q 例如,浮点数x=0.5,定标Q=15,则定点数xq=[0.5*32768]=16384,式中[]表示下取整。反之,一个用Q=15表示的定点数16384,其浮点数为16384/2e15=16384/32768=0.5。浮点数转换为定点数时,为了降低截尾误差,在取整前可以先加上0.5。 表1.1 Q表示、S表示及数值范围 Q表示 S表示十进制数表示范围 Q15 S0.15 -1≤x≤0.9999695 Q14 S1.14 -2≤x≤1.9999390 Q13 S2.13 -4≤x≤3.9998779 Q12 S3.12 -8≤x≤7.9997559 Q11 S4.11 -16≤x≤15.9995117 Q10 S5.10 -32≤x≤31.9990234 Q9 S6.9 -64≤x≤63.9980469 Q8 S7.8 -128≤x≤127.9960938 Q7 S8.7 -256≤x≤255.9921875

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

浮点转定点方法总结

浮点转定点方法总结 —孔德琦

目录 定点运算方法................................................ 错误!未定义书签。 数的定标 ............................................... 错误!未定义书签。 C语言:从浮点到定点 ................................. 错误!未定义书签。 加法.................................................... 错误!未定义书签。 乘法..................................................... 错误!未定义书签。 除法..................................................... 错误!未定义书签。 三角函数运算............................................ 错误!未定义书签。 开方运算................................................ 错误!未定义书签。 附录...................................................... 错误!未定义书签。 附录1:定点函数库...................................... 错误!未定义书签。 附录2:正弦和余弦表..................................... 错误!未定义书签。

关于C语言中的字符串数组输入输出控制符的若干问题

关于C语言中的字符串数组输入输出控制符的若干问题示例一: #include void main() { int i; int a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%d",&(a[i])); } printf("%d,%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4],a[5]); //printf("%d",a); 这是错误做法,没有输出若干个实数的控制符,只能一个个输出。 } 实例二: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%s",&(a[i])); //只可从键盘输入一个字符,否则输出将每次输入多余的部分丢弃。 //不可写成:scanf("%c",&(a[i])); } printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]); //不可用%s%s%s%s%s%s //也可以这样写:printf("%s",a); } 示例三: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%c",&(a[i])); getchar(); //如果用%c作为输入一个字符控制符用,后面必须加此句; } a[6] = '\0'; //如果用%c作为输入一个字符控制符用,后面必须加此句; printf("%s",a); }

字符及字符串输入输出与顺序程序设计实验样本

微机原理第二次实验字符及字符串输入输出与顺序程序设计实验 班级: 姓名: 学号: 日期:

2.2 字符及字符串输入输出与顺序程序设计实验 2.2.1 实验目 1、学习和掌握字符及字符串输入输出办法。 2、掌握顺序程序设计办法。 3、进一步掌握调试工具用法。 2.2.2 实验预习规定 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号 为0AH)以及字符串输出(功能号09H)调用办法(详见教材5.5.6)。 2、复习BCD码运算调节指令。 3、依照“2.2.3 实验内容”中给出源程序框架编写完整源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将成果在屏幕上显示出来。 1、问题分析 例如使用功能号为01H用于实现单个字符输入DOS功能调用接受从键盘输入两个十进制数8和6,这时计算机内部得到是这两个数ASCII码值38H和36H。由于数字0 9ASCII码值与其代表数值之间相差30H,因而将其减去30H即可得到以非压缩型BCD数形式表达十进制数08H和06H,使用ADD指令对它们进行相加后成果为0EH(00001110B),显然需要用非压缩型BCD数加法调节指令对ADD运算成果进行调节,调节后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其相应ASCII码31H(1ASCII码)和34H(4ASCII码),然后调用功能号为02H用于单个字符输出DOS功能调用将它们显示出来。综上所述,需要考虑如下问题。 (1)从键盘输入一种一位十进制数办法 通过功能号为1DOS功能调用实现从键盘输入一种字符,格式如下:

DSP编程技巧之22详解浮点运算的定点编程

DSP编程技巧之22详解浮点运算的定点编程 我们使用的处理器一般情况下,要么直接支持硬件的浮点运算,比如某些带有FPU的器件,要么就只支持定点运算,此时对浮点数的处理需要通过编译器来完成。在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的方法就是直接使用浮点类型,比如单精度的float来完成。但是在很多情况下,限于成本、物料等因素,可供我们使用的只有一个定点处理器时,直接使用float类型进行浮点类型的运算会使得编译器产生大量的代码来完成一段看起来十分简单的浮 点数学运算,造成的后果是程序的执行时间显著加长,且其占用的资源量也会成倍地增加,这就涉及到了如何在定点处理器上对浮点运算进行高效处理的问题。本文引用地址:https://www.wendangku.net/doc/4b12809595.html,/article/263475.htm 既然是定点处理器,那么其对定点数,或者说字面意义上的“整数”进行处理的效率就会比它处理浮点类型的运算要高的多。所以在定点处理器上,我们使用定点的整数来代表一个浮点数,并规定整数位数和小数位数,从而方便地对定点数和浮点数进行转换。以一个32位的定点数为例,假设转换因子为Q,即32位中小数的位数为Q,整数位数则为31-Q(有符号数的情况),则定点数与浮点数的换算关系为:定点数=浮点数×2^Q例如,浮点数-2.0转换到Q为30的定点数时,

结果为:定点数=-2×2^30=-2147483648 32位有符号数的表示范围是:-2147483648到2147483647。如果我们把有符号定点数的最大值2147483647转换为Q为30对应的浮点数,则结果为:浮点数 2147483647/2^30=1.999999999 从上面的两个计算例子中也可以看出,在Q30格式的情况下,最大的浮点数只能表示到1.999999999,如果我们想把浮点数2.0转换为Q30的定点数,则产生了溢出,即造成了1e-9的截断误差。在此我们列出Q0到Q30对应的范围和分辨率如下表所示:如果你嫌自己计算麻烦的话,可以借助Matlab的命令来求取它们的转换,例如,在Matlab的命令窗口中输入:q = quantizer('fixed', 'ceil', 'saturate', [32 30]); FixedNum=bin2dec(num2bin(q,1.999999999)); 回车之后就可以看到1.999999999转成Q30之后的定点数了。 弄清楚了单个浮点数和定点数之间的转换关系,接下来就需要了解一下两个定点数所代表的浮点数进行运算时,是如何转换的了。根据乘法的结合律、分配率,浮点数转换之后的定点数是可以直接运算的,例如: 1. 不同Q格式的转换设有定点数Fixed1=Float1*2^Q1,如果把它用为Q2这个不同精度/表示范围的定点数来表示,则有 Fixed2=Float1*2^Q2。所以不同的Q格式直接的转换为:Fixed2=Fixed1*2^Q2/2^Q1=Fixed1*2^(Q2-Q1) 因为

C语言中的输入输出函数总结

putchar ():把变量中的一个字符常量输出到显示器屏幕上; getchar ();从键盘上输入一个字符常量,此常量就是该函数的值; printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上; scanf ();从键盘上输入各类数据,并存放到程序变量中; puts ():把数组变量中的一个字符串常量输出到显示器屏幕上; gets ():从键盘上输入一个字符串常量并放到程序的数组中. sscanf(); 从一个字符串中提取各类数据。 putchar() 输出一个字符 getchar() 输入流中获取一个字符 例如: char c = getchar(); putchar(c); 格式化输入输出scanf()和printf()是最有用的,所以重点讲一下。 printf(): 一般形式: printf("格式控制".输出列表); eg : printf("a=%d,b=%f,c=%c\n",a,b,c); 1;格式控制. 格式控制是用双引号括起来的字符串,也称"转换控制字符串",它包含以下两部分信息. 格式说明:由"%"和格式字符组成,如%d,%f,%c,他的作用是把输出数据转换为指定格式输出,格式的说明总是由"%"字符开始的. 普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如\n,\t。 2;输出列表 就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开. 一些特殊字符的输出: 单引号,双引号,和反斜杠的输出在前面加转义字符”\” 如:”\’” , “\””, “\\” %的输出用两个连在一起的%%,即printf(“%%”); 常用的格式说明如下: 格式字符 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀O) x 以十六进制形式输出无符号整数(不输出前缀OX) u 以十进制形式输出无符号整数 f 以小数形式输出单精度实数 lf 以小数形式输出双精度实数

浮点转定点方法总结

CII Technologies, Inc. 浮点转定点方法总结 浮点转定点方法总结 —孔德琦 1

CII Technologies, Inc. 目录 目录 定点运算方法 (3) 1.1数的定标 (3) 1.2 C语言:从浮点到定点 (4) 1.2.1 加法 (4) 1.2.2乘法 (6) 1.2.3除法 (7) 1.2.4 三角函数运算 (8) 1.2.5 开方运算 (9) 1.3附录 (10) 1.3.1 附录1:定点函数库 (10) 1.3.2附录2:正弦和余弦表 (19) 2

CII Technologies, Inc. 浮点转定点方法总结 定点运算方法 1.1 数的定标 对某些处理器而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,如何处理小数的呢?应该说,处理器本身无能为力。那么是不是就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。这就是数的定标。 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标用Q表示法。表1.1列出了一个16位数的16种Q表示能表示的十进制数值范围和近似的精度。 Q表示精度(近似) 十进制数表示范围 Q15 0.00002 -1≤X≤0.9999695 Q14 0.00005 -2≤X≤1.9999390 Q13 0.0001 -4≤X≤3.9998779 Q12 0.0002 -8≤X≤7.9997559 Q11 0.0005 -16≤X≤15.9995117 Q10 0.001 -32≤X≤31.9990234 Q9 0.002 -64≤X≤63.9980469 Q8 0.005 -128≤X≤127.9960938 Q7 0.01 -256≤X≤255.9921875 Q6 0.02 -512≤X≤511.9804375 Q5 0.04 -1024≤X≤1023.96875 Q4 0.08 -2048≤X≤2047.9375 Q3 0.1 -4096≤X≤4095.875 Q2 0.25 -8192≤X≤8191.75 Q1 0.5 -16384≤X≤16383.5 Q0 1 -32768≤X≤32767 表1.1 Q表示、S表示及数值范围 从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如: 16进制数2000H=8192,用Q0表示 16进制数2000H=0.25,用Q15表示 从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0的数值范围是-32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为 3

字符及字符串输入输出与顺序程序设计实验

微机原理第二次试验字符及字符串输入输出与顺序程序设计实验 班级: 姓名: 学号: 日期:

字符及字符串输入输出与顺序程序设计实验 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为 0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。 1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0?9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下: MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV D X, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串 MOV AH, 09H INT 21H (2)非压缩型BCD数加法调整指令的使用 设从键盘输入的数值已存放在寄存器AL, BL中,可用下列程序完成数据相加和调整操作:XOR AH,AH ADD A L, BL AAA ;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字 请读者考虑,为什么要使用指令“XOR AH,AH”,不用行否? (3)计算结果的显示 执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调

浮点转定点算法

在定点的DSP或处理器中,实现一个浮点数的运算时一个非常复杂的事情,尤其是非四则运算的函数运算,例如三角函数运算,sin,cos,tan,又比如指数运算,exp,非整数的幂运算等等。用机器来实现这样复杂的运算,会花费很多的计算指令周期。在某些程度下,用定点整数去代替浮点运算,会很大程度的节省运算时间,是应用程序达到实时运算的效果。 一DSP定点算数运算 1数的定标 在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。 一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。 显然,字长越长,所能表示的数的范围越大,精度也越高。如无特别说明,本书均以16位字长为例。 DSP芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正, l则表示数值为负。其余15位表示数值的大小。因此, 二进制数0010000000000011b=8195 二进制数1111111111111100b=-4 对DSP芯片而言,参与数值运算的数就是16位的整型数。但在许多情况下,数学运算过程中的数不一 定都是整数。那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。那么是不是说 DSP芯片就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的小数点处 于16位中的哪一位。这就是数的定标。 通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法 和S表示法两种。表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。 从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。例如, 16进制数2000H=8192,用Q0表示 16进制数2000H=0.25,用Q15表示 但对于DSP芯片来说,处理方法是完全相同的。 从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。Q越大,数值范围越小, 但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0的数值范围是一32768到+32767, 其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。因此,对定点数而言, 数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想 精度提高,则数的表示范围就相应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑 到这一点。 浮点数与定点数的转换关系可表示为: 浮点数(x)转换为定点数(xq):xq=(int)x*2Q 定点数(xq)转换为浮点数(x):x=(float)xq*2-Q 例如,浮点数x=0.5,定标Q=15,则定点数xq=L0.5*32768J=16384,式中LJ表示下取整。反之,

浮点,simulink 定标指导,定点

Simulink代码生成系列(定点数)8 2010-04-11 21:21:41| 分类:项目4_高性能DSP | 标签: |举报 |字号大中小订阅 李会先(整理MATLAB) 关于定点数 定点数和它们的数据类型以字长、二进制小数点、有符号还是无符号为特征,SIMULINK定点软件支持整数和定点数,它们的主要区别是小数点。 一般的二进制定点数表示为: 定点数的标度 对于同等字长度,定点数的动态范围远小于浮点数,为了避免溢出和最小化量化误差,定点数需要标度,因此用如下方法来表示一个定点数。 ?V是任意精度的实数 ?是实数的近似 ?Q是一个存储值,用来编码V ?S=F 是斜率 ?B是偏差(基准) 斜率被分成两个部分:

? 确定二进制小数点,E是2的幂指数 ?F是斜率调整因子,规范化时1≤F﹤2 只有缩放标度的二进制小数 ?F=1 ?S=F = ?B=0 一个被量化的实数的标度用斜率S定义,这被严格的限制为2的幂,负的2的幂指数被称为分数长度,分数长度是二进制小数点右边的比特数。对于仅有缩放的二进制小数,定点数据类型表示为:?signed types —fixdt(1, WordLength, FractionLength) ?unsigned types —fixdt(0, WordLength, FractionLength) 整数是定点数类型的特殊情况,整数的用斜率为1直接标度,偏差为0,或者相当于分数长度为0,整数表达为: ?signed integer —fixdt(1, WordLength, 0) ?unsigned integer —fixdt(0, WordLength, 0) 斜率和偏差(基准)标度 当用斜率和偏差标度,被量化的实数的斜率S和偏差B可以使任何值,斜率必须是正数,用S和B定点数被表达为: ?fixdt(Signed, WordLength, Slope, Bias) 范围和精度

字符及字符串输入输出与顺序程序设计实验 实验报告

字符及字符串输入输出与顺序程序设计实验 实验报告 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串 输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串

字符串的输入与输出

C语言中,没有字符串类型,用字符数组处理字符串。 字符数组定义: char 数组名[常量表达式] [,[常量表达式]]; 说明:一维字符数组,用于存储和处理一个字符串,二维字符数组,用于同时存储和处理多个字符串; 因为字符型与整型是通用的,可以用int来定义字符数组,但两者有区别,如:char c[10]; /* 在内存中占10字节*/ int c[10]; /* 在内存中占40字节*/ 输入输出方法:逐个字符输入输出:%c,整个字符串输入输出:%s 一:用scanf()输入字符串,printf()输出字符串: 逐个字符处理: #include "stdio.h " void main() { char ch[5]; int i; for(i=0;i<5;i++) scanf(“%c”, &ch[i]); for(i=0;i<5;i++) printf(“%c”, ch[i]); } 整个字符串处理: #include "stdio.h " void main() { char ch[5]; scanf(“%s”,ch); printf(“%s”, ch); } 说明: 以字符串为单位处理时,直接使用数组名,无需&; 输入字符串时,字符个数要小于数组的长度,如输入5个字符,定义的字符数组至少应有6个元素; 输入字符串时,若遇空格或回车,输入结束,并自动在串后加上结束标志?\0?;输出字符串时,遇到字符串结束标志?\0?,输出结束。 二:用字符串处理函数输入和输出 字符串标准函数的原型在头文件string.h中(使用字符串处理函数输入和输出时要在头文件上加入#include) 字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,自动换行,即用?\n?替换了?\0?) 说明:字符数组必须以…\0?结束 字符串输入函数gets

浮点运算转定点运算

与afreez一起学习DSP中浮点转定点运算 一:浮点与定点概述 1.1相关定义说明 定点数:通俗的说,小数点固定的数。以人民币为例,我们日常经常说到的如123.45¥,789.34¥等等,默认的情况下,小数点后面有两位小数,即角,分。如果小数点在最高有效位的前面,则这样的数称为纯小数的定点数,如0.12345,0.78934等。如果小数点在最低有效位的后面,则这样的数称为纯整数的定点数,如12345,78934等。 浮点数:一般说来,小数点不固定的数。比较容易的理解方式是,考虑以下我们日常见到的科学记数法,拿我们上面的数字举例,如123.45,可以写成以下几种形式: 12.345x101 1.2345 x102 0.12345 x103xi …… 为了表示一个数,小数点的位置可以变化,即小数点不固定。 1.2定点数与浮点数的对比 为了简单的把问题描述清楚,这里都是十进制数字举例,详细的分析,大家可以在后面的文章中看到。 (1)表示的精度与范围不同 例如,我们用4个十进制数来表达一个数字。对于定点数(这里以定点整数为例),我们表示区间[0000,9999]中的任何一个数字,但是如果我们要想表示类似1234.3的数值就无能为力了,因为此时的表示精度为1/100=1;如果采用浮点数来表示(以归整的科学记数法,即小数点前有一位有效位,为例),则可以表示[0.000,9.999]之间的任何一个数字,表示的精度为1/103=0.001,精度比上一种方式提高了很多,但是表示的范围却小了很多。 也就是说,一般的,定点数表示的精度较低,但表示的数值范围较大;而浮点数恰恰相反。 (2)计算机中运算的效率不同 一般说来,定点数的运算在计算机中实现起来比较简单,效率较高;而浮点数的运算在计算机中实现起来比较复杂,效率相对较低。 (3)硬件依赖性 一般说来,只要有硬件提供运算部件,就会提供定点数运算的支持(不知道说的确切否,没有听说过不支持定点数运算的硬件),但不一定支持浮点数运算,如有的很多嵌入式开发板就不提供浮点运算的支持。 1.3与DSP的关系 一般说来,DSP处理器可以分为两大类:定点与浮点。两者相比较而言,定点DSP处理器速度快,功耗低,价格也便宜;而浮点DSP则计算精度高,动态范围大。

字符及字符串输入输出与顺序程序设计实验

字符及字符串输入输出与顺序程序设计实验 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII 码值38H和36H。 由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。 综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串 MOV AH, 09H INT 21H (3)非压缩型BCD数加法调整指令的使用 设从键盘输入的数值已存放在寄存器AL, BL中,可用下列程序完成数据相加和调整操作: XOR AH,AH ADD AL, BL AAA ;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字

字符及字符串的输入输出

实验四字符及字符串的输入输出1 实验目的 掌握简单的DOS系统功能调用 掌握在PC机上建立,汇编,连接,调试程序 2 实验内容 内容一:字符的输入和输出 从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母。 程序段: CSEG SEGMENT ASSUME CS:CSEG START:MOV AH,1 INT 21H MOV BL,7AH MOV CL,61H SUB BL,AL ADD BL,CL MOV AL,BL MOV DL,AL MOV AH,2 INT 21H KEY:MOV AH,1 INT 16H JZ KEY MOV AH,4CH INT 21H CSEG ENDS END START 实验结果截图如下: 实验习题: 程序段: DSEG SEGMENT STRING1 DB 'Please input a lowercase letter:',0DH,0AH,'$' STRING2 DB 'The inverse letter is:',0DH,0AH,'$' DSEG ENDS ; CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX

LEA DX,STRING1 MOV AH,09H INT 21H MOV AH,1 INT 21H MOV BL,7AH MOV CL,61H SUB BL,AL ADD BL,CL LEA DX,STRING2 MOV AH,09H INT 21H MOV DL,BL MOV AH,2 INT 21H KEY:MOV AH,1 INT 16H JZ KEY MOV AH,4CH INT 21H CSEG ENDS END START 实验截图如下: 内容二:字符串的输入和输出 从键盘输入一个字符串,将输入的字符串传说给STR变量,在屏幕上显示STR变量中的内容。程序段: DSEG SEGMENT KBUF DB 0DH,0AH STR DB 20 DUP(20H),'$' DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DX,KBUF MOV AH,0AH INT 21H MOV CX,20 ADD DX,2

相关文档
相关文档 最新文档