要想超神,就要什么都精!

知识准备:

1. 输出浮点数的十六进制形式?(利用指针输出)

将浮点数指针-转换成-整型指针,以十六进制的格式输出指针内容。

示例程序:

#include<stdio.h>

int main()
{
float *var; scanf("%f",var);
printf("%x",*((int*)var));
}

测试

输入(float) 输出(十六进制) 二进制
8.25 41040000 0100 0001 0000 0100 0000 0000 0000 0000
-8.25 c1040000 1100 0001 0000 0100 0000 0000 0000 0000

浮点数在计算机的存储格式?

符号位:0为正,1为负;

指数位:移码表示;

尾数位:隐式存储小数点前面的1,也就是只存储小数点后面的位

示例:

十进制:8.25

二进制:1000.01 = 1.00001 x 23 = 1.00001 x 2011

符号位为:0

指数位为:3 + 127 = 130 = 1000 0010b

尾数位为:00001

最终,8.25在计算机中存储的形式为0100 0001 0000 0100 0000 0000 0000 0000b

对比我们自己计算出的结果 与 通过计算机输出的结果,一致:程序正确。

可以正式进行程序设计了

程序设计:

我们int型作为定点数的一个容器,假设定点数32位,符号部分1位,整数部分15位,小数部分16位

分别得到浮点数的符号、整数部分与小数部分,对应到定点数的各部分。

程序:

#include<stdio.h>

#define SIGN_BIT 0x80000000
#define EXP_BIT 0x7f800000
#define TAIL_BIT 0x007fffff int main()
{
float *aFloat;//浮点数
int aFix = ;//定点数容器
int tmp = ;//浮点数容器
int exp = ;//指数大小
int tail = ;//尾数位容器
scanf("%f",aFloat);
tmp = *((int*)aFloat);//置定点数的符号位
aFix = tmp & SIGN_BIT; //置定点数的整数部分
exp = ((tmp & EXP_BIT) >> ) - ;//指数值
tail = ((tmp & TAIL_BIT) | 0x00800000);//尾数各位
aFix = aFix | ((tail >> (-exp)) << ); //置定点数的小数部分
aFix = aFix | ((tail & ~(0xffffffff << (-exp))) >> (-exp));
printf("%x\n",aFix);
}

测试:

输入 输出(十六进制) 输出(二进制)
8.25 84000 0000 0000 0000 1000 0100 0000 0000 0000 0000
-8.25 80084000 1000 0000 0000 1000 0100 0000 0000 0000 0000

按照我们前面指定的规则:定点数的符号位1位,整数位15位,小数位16位

将二进制换算出来,答案正确。

【C语言模拟实现】浮点数-转-定点数的更多相关文章

  1. 平方根的C语言实现(一) —— 浮点数的存储

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7203254.html 作者:窗户 Q ...

  2. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  3. 关于c语言模拟c++的多态

    关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...

  4. c语言模拟c++的继承和多态

    //C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" < ...

  5. char和varchar、浮点数和定点数

    cmd连接mysql数据库:找到mysql目录,进入到bin目录,然后在命令行中输入 mysql -hlocalhost -uroot -ppass ,连接mysql数据库成功. 1.char和var ...

  6. MySQL浮点数和定点数

    MySQL 分为两种方式:浮点数和定点数.浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示.定点数在 MySQL 内部以字符串形式存放,比浮点数更精 ...

  7. C语言::模拟实现strlen函数

    题目要求 编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0 ...

  8. C语言:模拟密码输入显示星号

    一个安全的程序在用户输入密码时不应该显示密码本身,而应该回显星号或者点号,例如······或******,这在网页.PC软件.ATM机.POS机上经常看到.但是C语言没有提供类似的功能,控制台上只能原 ...

  9. c语言模拟实现oc引用计数

    #include<stdio.h> #include<stdlib.h> //在c中引入 引用计数机制 // 要解决的问题:  1,指向某块动态内存的指针有几个? //    ...

随机推荐

  1. Ubuntu安装samba的问题

    问题: root@ubuntu:~# apt-get install samba 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装.如果 ...

  2. PHP Filter

    PHP filters are used to validate and sanitize external input. Validating data is determine if the da ...

  3. 手机端APP原型相关

    http://www.isux.us/demoo/index.php(很慢) https://www.mockplus.cn/

  4. Howto add permanent static routes in Ubuntu

    Static routing is the term used to refer to the manual method used to set up routing. An administrat ...

  5. CentOS下安装keepalived 进行服务器热备

    一.准备: 1.1 安装依赖软件 如果系统为基本文本安装,需要安装一下软件  yum -y install ipvsadm yum -y install kernel kernel-devel reb ...

  6. ehcache memcache redis -- java中的三大缓存

      三个缓存在java代码中用的是较多的,但是它们都有自己的应用场合,和优缺点.  Ehcache 1.初衷:减少数据库操作的高延时而设计.(缓存的目的,好像都是这个吧) 2.Apache Licen ...

  7. Java 正则表达式学习总结和一些小例子

    从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. java.util.r ...

  8. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  9. ZOJ 1095 Humble Numbers

    原题链接 题目大意:定义了一种数字Humble Number,他们的质因数只包含2.3.5.7中的一个或者几个,求第n个这样的数,1<=n<=5842. 解法:一看到这道题又在想DFS了, ...

  10. leetcode之反转链表

    原文链接:点击打开链接 Reverse a singly linked list A linked list can be reversed either iteratively or recursi ...