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

知识准备:

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. [zz]Java中的instanceof关键字

    1.What is the 'instanceof' operator used for? stackoverflow的一个回答:http://stackoverflow.com/questions/ ...

  2. Mac环境下装node.js,npm,express

    1. 下载node.js for Mac 地址: http://nodejs.org/ 直接下载 pkg的,双击安装,一路点next,很容易就搞定了. 安装完会提醒注意 node和npm的路径是 /u ...

  3. Java 集合深入理解(12):古老的 Vector

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这 ...

  4. 清除浮动1-使用:after 伪元素

    <!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...

  5. HDU 4407

    http://acm.hdu.edu.cn/showproblem.php?pid=4407 把修改和询问分成两部分解决 询问求区间内与p不互素的和,和求个数一样,用容斥原理解决,只不过做容斥的时候把 ...

  6. js实现分页列表添加样式

    <script> var dUrl=window.location.href; var cUrl=(dUrl.substring(0, dUrl.indexOf('list_'))); v ...

  7. Linux 下网络性能优化方法简析

    概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...

  8. HDFS+MapReduce+Hive+HBase十分钟快速入门

    1.     前言 本文的目的是让一个从未接触Hadoop的人,在很短的时间内快速上手,掌握编译.安装和简单的使用. 2.     Hadoop家族 截止2009-8-19日,整个Hadoop家族由以 ...

  9. ZOJ Problem Set - 3640 Help Me Escape

    题目大意: 有n条路,选每条路的概率相等,初始能力值为f,每条路通过的难度值为ci,当能力值大于某条路A的难度值b时,能够成功逃离,花费时间ti,小于等于时,不能逃离,天数加一天,但能力值增加b. 给 ...

  10. KVO的简单用法

    KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了 ...