zoukankan      html  css  js  c++  java
  • c、c++中-int型以float或者float型以int输出问题

    1、将浮点型以整形的类型输出问题

    用VC6.0,会把以整形输出形式的浮点数输出为0;

     1 #include"stdio.h"
     2 int main()
     3 {
     4     float x=2.5,y=4.7,z;
     5     int a=7;
     6     z=x+a%3*(int)(x+y)%2/4;
     7     printf("%d
    ",z);
     8     printf("%d
    ",x);
     9     printf("%d
    ",x+a%3*(int)(x+y)%2/4);
    10     printf("%f
    ",x+a%3*(int)(x+y)%2/4);
    11     return 0;
    12 }

    但是要是X大一点的话就不会输出为0了

    2、将整形以浮点型的类型输出问题

    #include <stdio.h>
    static void forcefloat(float *p)
    {
         float f = *p;
         forcefloat(&f);
    }

    void main()
    {
         int i=2;
         float j = 2.0;
         printf(" %f %f ",i,j);
    }
    ------------------------------------
    问题是这样的,为什么程序的输出结果是
    0.0000000  2.0000000

    我的猜测是因为int型是两个字节,所以2表示为0000000000000010,那么如果按照浮点数输出,则把这两个字节看作是浮点数的低字节,也就是尾数部分,所以结果是0.00000000
    但是我尝试着将i的值变为65535,结果还是0.0000000,我想请高手替我解释一下,以能讲清楚基本原理并能上机通过为准,谢谢~~~~~~~

    这个猜测是错误的,出现这样问题的原因是float型的每一位的意义与整形不同

    int i=2;

    4个字节就是 00000000 00000000 00000000 00000010
    然后根据你的printf 格式,
    float 解析:
    高位0表示正数,
    指数8位都是0, 那么就是 -127 次方, 然后...尾数已经不用考虑了 ~

    -127 次方,
    得到的结果基本是 0,
    以float 6-7 位的精度,
    显然得到的结果是 0 ...
    (2 的-127 次方, 估计得接近40位小数才有非0值出现)

    参考:https://blog.csdn.net/xxgxgx/article/details/46722143

    https://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html

  • 相关阅读:
    Java基本概念
    Java基础语法
    Java环境的搭建
    elicpse
    常见编译器EOP
    上传突破学习笔记
    认识ollydbg
    160个Crackerme破解
    python基础(1)
    文件上传
  • 原文地址:https://www.cnblogs.com/zhj868/p/14240653.html
Copyright © 2011-2022 走看看