zoukankan      html  css  js  c++  java
  • C++基础题--float型以整型格式输出

     1 int main()
     2 {
     3     float a =765;
     4     a++;
     5     printf("%d
    ", a);
     6     system("pause");
     7     return 0;
     8 }
     9 //为什么会输出是0?
    10 解释如下:
    11 在printf时,float 会自动转换成double型,由32位变到64位。%d输出的是最低的32位。
    12 电脑是小端模式,故保存765时,是以下格式
    13 栈底(高字节).................栈顶(低字节)
    14 765                           0000
    15 下面引申一道题
    16 int main(){
    17   int a;float b,c;
    18   scanf("%2d%3f%4f",&a,&b,&c);
    19   printf("
    a=%d,b=%d,c=%f
    ",a,b,c);
    20 }
    21 若运行时从键盘上输入9876543210l,则上面程序在gcc编译器下的输出结果是a=98,b=0,c=0.000000
    22 解析:
    23 printf时,float会自动转换为double型,因此变量b 和 变量c 从32位转64位;
    24 b是以%d 的格式进行输出,因而输出的是最低的32位。
    25 电脑是小端模式--高字节高地址,低字节低地址
    26 printf压入栈的顺序是从右到左,因而先压C,再B,再A;
    27 栈底(高字节).................栈顶(低字节)
    28 4321     0000      765     0000         98
    29 4字节     4字节    4字节    4字节      4字节
    30 从低字节开始进行输出,
    31 首先输出a, 四个字节,即98
    32 然后输出b, 四个字节,即0
    33 然后输出c,八个字节,是正常方式打印,会一下子读取八个字节,正好前四个字节全是0。由于浮点数存储的方式,
    34 64位里面包括了1符号位,11阶数,52尾数,阶数是0,表示-1023 + 1023 = 0,用指数表示:1.#*2^-102335 ‘#’是代表尾数。尾数是000。。。后面数字但很小,所以这个浮点数是非常小的。 这道题可以说是b的输出方式影响
    36 了C,如果b用%f输出,那么b和c都会显示正确
    在代码的世界尽情的翱翔吧!
  • 相关阅读:
    Luogu 3119 [USACO15JAN]草鉴定Grass Cownoisseur
    Luogu 4514 上帝造题的七分钟
    Luogu 1484 种树
    Luogu【P2904】跨河(DP)
    Luogu【P2065】贪心的果农(DP)
    Luogu【P1725】琪露诺(单调队列,DP)
    二分图匹配
    单调队列
    Tarjan的强联通分量
    手写堆
  • 原文地址:https://www.cnblogs.com/maleyang/p/7400560.html
Copyright © 2011-2022 走看看