zoukankan      html  css  js  c++  java
  • 关于C语言中不同类型数据进行计算 有符号和无符号数进行计算

    float是8个有效位,

    做个试验:

     输出如下:

     上面说明了什么:

    1, 18/2.2 是除不尽的, 因为是define,所以没有给ratio变量赋值类型,但是从sizeof输出的结果是8,所以系统默认给ratio的类型是double类型了.

       即是是除进了 #define  ratio 8.8  这样就算是有限的小数,也是double类型的.

    2,%.3f是可以输出小数点三位的,但是我们看到循环部分是1818181818....然后输出3位小数的时候,就是进一了,出现了182,这个2就是进位得到的.

    改成%.4f输出的时候,结果是:

    说明了,这里的规则可能是,四舍五入,因为四位小数的时候,8没有变成9.

    3, 还有一个是这个是double类型的但是我输出的是%f,也是可以输出的. 按照正常情况,应该是%lf的.

    4,我把他以%.10f输出 也是可以输出来的.因为是double类型,这里我们做第二是实验.

    第二实验

     

     输出结果:

     从上面的实验可以看出,

    1, 这里直接定义了float变量 ratio_2, 它就是float,然后输出的sizeo是4.

    2,我以 %.10f进行输出 8.1818180084 这里看到float的精度损失了,因为float是8个有效数字的.

    关于有效数字: (8个有效数字,第8个数是不准的)

    但是 doule 格式的输出是没有问题的.

    第三个实验,

     输出结果:

     

    从上面可以得到:

    1,一个ratio_3是int 然后减去一个无限小数后,输出结果,还是int , 10-8.18...=1.8左右; 但是最终的结果是1. 

      关键这里,也没有进一,就很奇怪了.看来转换的时候,就是直接去除了.

     下面还有一个对比实验.

    2,然后如果让int类型的 ratio_3 以float类型输出,那么就是错误的,会是0.因为int和float的二进制存储机制是不同的.

    3,之后多减几次:

    减两次:

    10-8.1818....-8.1818...   =  这里是-7,

     减三次:

    10-8.1818...-8.1818...-8.1818...= 这里是-15,

    可以看出无论减多少次,都是不要小数的....

    上面的实验是,从double类型的数据,通过和int类型计算,转换成int类型的

    这里就是直接把小数部分省掉了,

    如果是,把double类型的强制转换成int呢??? 需要做下面的实验四.

    第四个实验,

     输出结果

    说明什么,

    1, 把  8.18181.... 通过 (int) 进行强制转换,  输出结果是8

    可能是位数不够

    然后

     

     然后运行的结果:

         把float输出来   

     上面是float 进行强制转换, 只有到8个9的时候, 1.999...才变成了2 .

    之前少于8个9,如论是多少,都会被舍去.

    然后把float换成double再试一次:

     

     然后运行结果:

     从上面看,好像double无论是几个都不会出现 1.9999 变成2 的情况  也许是因为你的9不够多.

     这里int 和double运算,赋值给int后,,,,和强制转换int似乎是一样的结果.??? 还有待去验证...

    https://www.cnblogs.com/weiyouqing/p/9090542.html

     https://blog.csdn.net/qq_47406941/article/details/112707018

    参考上面博主.

    关于上面的,会造成一个问题.

    (int 类型的数据 )  -  (double类型数据) = (in类型数据.)

    这样计算出的int就会损失一部分.

    为了不损失,可以转换一下思路:把float+0.5 在参与计算,这样,有的时候会增加,有的时候会减小,平均下来,就不变了...

     

     

    该死呦,把计算机二级的东西都忘干净了

    最后来一道计算机二级选择题吧:

     不同类型计算:

    https://www.cnblogs.com/qingergege/p/7507533.html

    关于负数移位操作:

    https://www.cnblogs.com/L-0x0b/p/10858523.html

     

  • 相关阅读:
    学习笔记15—Python 存储集
    学习笔记14—Python error集
    学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值
    学习笔记12—linux下文件的复制、移动与删除
    学习笔记11—MATLAB 界面设计
    学习笔记10—Python 绘图集
    学习笔记9—python数据表的合并(join(), merge()和concat())
    学习笔记8—MATLAB中奇异值处理办法
    make ffmpeg makefile
    Linux Socket
  • 原文地址:https://www.cnblogs.com/chulin/p/14296977.html
Copyright © 2011-2022 走看看