【C语言模拟实现】浮点数-转-定点数
要想超神,就要什么都精!
知识准备:
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语言模拟实现】浮点数-转-定点数的更多相关文章
- 平方根的C语言实现(一) —— 浮点数的存储
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7203254.html 作者:窗户 Q ...
- 语言模拟ATM自动取款机系统
C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...
- 关于c语言模拟c++的多态
关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...
- c语言模拟c++的继承和多态
//C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" < ...
- char和varchar、浮点数和定点数
cmd连接mysql数据库:找到mysql目录,进入到bin目录,然后在命令行中输入 mysql -hlocalhost -uroot -ppass ,连接mysql数据库成功. 1.char和var ...
- MySQL浮点数和定点数
MySQL 分为两种方式:浮点数和定点数.浮点数包括 float(单精度)和 double(双精度),而定点数则只有 decimal 一种表示.定点数在 MySQL 内部以字符串形式存放,比浮点数更精 ...
- C语言::模拟实现strlen函数
题目要求 编写一个C语言程序模拟实现strlen函数. 算法 strlen函数功能是计算字符串中字符的个数.(除\0外) 而字符串本身就是一个字符数组,只不过末尾以\0结束. 因此,我们只需遍历除\0 ...
- C语言:模拟密码输入显示星号
一个安全的程序在用户输入密码时不应该显示密码本身,而应该回显星号或者点号,例如······或******,这在网页.PC软件.ATM机.POS机上经常看到.但是C语言没有提供类似的功能,控制台上只能原 ...
- c语言模拟实现oc引用计数
#include<stdio.h> #include<stdlib.h> //在c中引入 引用计数机制 // 要解决的问题: 1,指向某块动态内存的指针有几个? // ...
随机推荐
- loadrunner录制时弹出invalid application path!please check if application exists对话框
问题:oadrunner录制时弹出invalid application path!please check if application exists对话框 原因:IE浏览器地址不对,需要手动重新选 ...
- HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)
题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...
- Android Studio调试功能使用总结
先编译好要调试的程序 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试. IDE下方出现Debug视图,红色的箭头指向 ...
- Linux交叉开发环境搭建 —— 效率之源
楼主今天终于把所有Linux开发环境需要的软件下载完毕了.虽然以前也是搭建过的,时间久了又折腾了一晚上. 交叉环境: Windows.Linux文件共享 SecureCRT 连接虚拟机终端 工具: V ...
- [转]SQLite C/C++
SQLite C/C++ http://blog.csdn.net/diaoser/article/details/6830786 辅助工具工具 Sqlite数据库的管理工具有SQLiteMana ...
- Python 如何跳出多重循环
Python 如何跳出多重循环 抛异常 return
- css 包含的图片和style="display:none"可以避免图片加载,可以节省网络流量
从别人那儿学到一招:先记录下来: <head> <meta charset="UTF-8"> <title>Document</title ...
- mac自带apache服务器开启
mac的os x操作系统自带的有apach服务器, 命令行: sudo apachectl -v 可查看自带apache版本信息 输入: sudo apachectl start 就开启了apa ...
- oc小总结
oc的一些总结 下面几个问题是oc中需要掌握的内容 1.如何掌握一个方法的方法名 2.一个对象调用一个autorelease,什么时候释放 3.字典和数组,集合都有什么特点 4.如何定义一个类 5.类 ...
- 书评<<剑指offer 名企面试官精讲典型编程题>>
前前后后阅读了一周, 感慨很多, 面试考察的是一个人的综合能力, 这一点从面试官的角度去解读, 确实对面试的理解更立体. *) 具体考察的点1) 扎实的基础2) 高质量的代码3) 清晰的思路4) ...