Hair_less 发表于 2022-12-7 17:07:51

求助!!

int main()
{
        intn = 100;
        int m = n * 1.1;
        int l= 100 * 1.1;
        printf("num1 = %d\n", n * 1.1);
        printf("num2 = %d\n", m);
        printf("num3 = %d\n",100 * 1.1);
        printf("num4 = %d\n", l);
        return 0;
}
为什么运行出来结果是:num1 = 1 , num2 = 110, num3 = 1, num4 = 110

高山 发表于 2022-12-7 17:39:45

不管怎样,我先提个建议
1、发代码请点击<>设置代码格式
2、如果是新人,跟你说下别人回答你的问题后请点击右下角设置最佳答案
3、人家上辈子欠你啊?请不要在标题加感叹号!!!
4、在标题上可以简洁、清楚地写出遇到的问题,你这叫三无标题
感谢你对论坛的支持!

jackz007 发表于 2022-12-7 17:50:14

本帖最后由 jackz007 于 2022-12-7 17:53 编辑

      100 * 1.1 是一个浮点数,应该使用 "%f" 来进行显示,当然,如果不想改 "%d" 的话,也可以前置 (int) 进行强制转换。
#include <stdio.h>

int main(void)
{
      intn = 100                            ;
      int m = n * 1.1                         ;
      int l= 100 * 1.1                      ;
      printf("num1 = %d\n", (int) (n * 1.1));
      printf("num2 = %d\n", m)                ;
      printf("num3 = %d\n",(int) (100 * 1.1)) ;
      printf("num4 = %d\n", l)                ;
      return 0                              ;
}

xiaotubie 发表于 2022-12-7 21:08:29

本帖最后由 xiaotubie 于 2022-12-7 21:24 编辑

因为不管是n*1.1还是   100*1.1   结果都是一个double类型的浮点数,占用8个字节,在计算机中采用的是符号+指数+尾数 的二进制存储方式。
在内存中按照从低到高的地址存的是:   01 00 00 00 00 80 5b 40 。 而%d取4字节整型输出,所以拿到前面的01 00 00 00 ,最后输出了1

而intm=n*1.1 , m是一个4字节整型的110 ,内存中存储的是6E 00 00 00,   %d刚好全部拿出,输出了110

我们再来个实验 %d 改成%lld我们让它输出8个字节的长整型,最后就把整个 01 00 00 00 00 80 5b 40 拿出来,当做整型来就算,当然你要返过来计算,因为是按小端存储的 ,结果很大很大。

Hello110 发表于 2022-12-7 21:20:53

[上传图片失败]
100*1.1对应的十六进制为:01 00 00 0000 80 5b 40[反汇编窗口,double类型]
当你printf的时候会把这个值复制到栈中,
但是int的大小是4字节,该函数会识别前4字节01 00 00 00 ,所以输出的值是1
[在x86环境下测试]

Hair_less 发表于 2022-12-9 15:56:31

高山 发表于 2022-12-7 17:39
不管怎样,我先提个建议
1、发代码请点击设置代码格式
2、如果是新人,跟你说下别人回答你的问题后请点击 ...

谢谢建议

Hair_less 发表于 2022-12-9 16:14:04

xiaotubie 发表于 2022-12-7 21:08
因为不管是n*1.1还是   100*1.1   结果都是一个double类型的浮点数,占用8个字节,在计算机中采用的是符号 ...

谢谢

Hair_less 发表于 2022-12-9 16:14:39

Hello110 发表于 2022-12-7 21:20
[上传图片失败]
100*1.1对应的十六进制为:01 00 00 0000 80 5b 40[反汇编窗口,double类型]
当你printf ...

谢谢

高山 发表于 2022-12-9 17:28:19

Hair_less 发表于 2022-12-9 16:14
谢谢

没事,以后继续加油
页: [1]
查看完整版本: 求助!!