zoukankan      html  css  js  c++  java
  • 【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 = 0;//定点数容器
            int tmp = 0;//浮点数容器
            int exp = 0;//指数大小
            int tail = 0;//尾数位容器
            scanf("%f",aFloat);
            tmp = *((int*)aFloat);//置定点数的符号位 
            aFix = tmp & SIGN_BIT;
    
            //置定点数的整数部分
            exp = ((tmp & EXP_BIT) >> 23) - 127;//指数值
            tail = ((tmp & TAIL_BIT) | 0x00800000);//尾数各位 
            aFix = aFix | ((tail >> (23-exp)) << 16);
    
            //置定点数的小数部分
            aFix = aFix | ((tail & ~(0xffffffff << (23-exp))) >> (7-exp));
            printf("%x
    ",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位

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

  • 相关阅读:
    OpenGL红宝书:第一个渲染程序Triangles常见问题归总
    OpenGL绘制简单的参数曲线(完)——三次B样条曲线
    OpenGL绘制简单的参数曲线(二)——三次Bezier曲线
    OpenGL绘制简单的参数曲线(一)——三次Hermite曲线
    xcode:读取txt文件
    mac opengl 画一个三角形
    glVertexAttribPointer
    glEnableVertexAttribArray 使用
    macOS下基于GLFW+GLAD的OpenGL环境配置
    php 执行 shell 命令转义字符
  • 原文地址:https://www.cnblogs.com/ISeeIC/p/4257047.html
Copyright © 2011-2022 走看看