【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,指向某块动态内存的指针有几个? // ...
随机推荐
- BZOJ 3398 牡牛和牝牛
dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 1、SQL基础整理(基本查询)
分离.附加.备份.还原 --去重 select distinct 列名from表名 --更新 update fenshu set name = ‘李四’where code = 9 --更改表名 sp ...
- CSS基础:text-overflow:ellipsis溢出文本
<!DOCTYPE html><html> <head> <title> new document </title> <meta na ...
- Linux 基础入门(新版)(实验一至实验四)
1.实验一 Lniux简介 操作系统:系统调用+内核 Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺:有全球所有的 Linux ...
- 如何选择分类器?LR、SVM、Ensemble、Deep learning
转自:https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms There are a ...
- Core Java Volume I — 4.6. Object Construction
4.6. Object ConstructionYou have seen how to write simple constructors that define the initial state ...
- ion torrent ion proton
https://www.youtube.com/watch?v=6Is3W7JkFp8 NGS 的视频 说的不错 一个做癌症的教授讲的 Ion Torrent™ next-generation seq ...
- Codeforces Round #137 (Div. 2)
A. Shooshuns and Sequence 显然\([k,n]\)之间所有数均要相同,为了求最少步数,即最多模拟\(n\)次操作即可. B. Cosmic Tables 映射\(x_i,y_i ...
- Codeforces Round #119 (Div. 2)
A. Cut Ribbon \(f(i)\)表示长为\(i\)的布条最多可以剪几段. B. Counting Rhombi \(O(wh)\)枚举中心计算 C. Permutations 将序列一映射 ...
- Java继承_接口练习题
1.创建一个名称为StaticDemo的类,并声明一个静态变量和一个普通变量.对变量分别赋予10和5的初始值.在main()方法中输出变量值. 编写代码如下: package org.hanqi.pr ...