• 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都会显示正确
    在代码的世界尽情的翱翔吧!
  • 相关阅读:
    CF1464C Poman Numbers
    CF1458F Range Diameter Sum
    Codeforces Round #691 (Div. 1) A~F题解&总结
    CF1458E Nim Shortcuts
    python读取当前以pdf结尾的文件并保存到excel文件里面
    vmware迁移到华三(H3C CAS 虚拟化平台)云平台
    vue+axois 封装请求+拦截器(请求锁+统一处理错误码)
    除了MD5加密,试一下签名吧
    C#---? ?? ?. ?: 好几种问号符号的使用方法
    C#---值类型为什么不能为空null
  • 原文地址:https://www.cnblogs.com/maleyang/p/7400560.html
Copyright © 2020-2023  润新知