c语言浮点数相等,c语言 浮点数转整型

  c语言浮点数相等,c语言 浮点数转整型

  混淆整数和浮点型,结果会很奇怪。

  #包含stdio.h

  int main(void)

  {

  浮动n1=3.0

  双n2=3.0

  long n3=2000000000

  龙n4=1234567890

  printf( % . 1e % . 1e % . 1e \ n ,n1,n2,n3,n4);

  printf(%ld %ld\n ,n3,n4);

  printf(%ld %ld %ld %ld \n ,n1,n2,n3,n4);

  getchar();

  返回0;

  }

  ` ` c

  在此插入代码片段。

  输出的第一行显示%e转换显示整数没有转换成浮点。考虑如果使用%e转换指令打印n3(long)将会发生什么。首先,当printf()函数认为要打印时,%e转换显示要打印的值是double类型(本系统中double为8字节)。当peintf()查看n3(4字节)时,它还会查看n3的相邻4个字节,共8个字节单元。然后,它将8字节单元中的位组合解释为浮点数(例如,它将一些位组合解释为指数)。因此,即使n3的位数正确,根据%e转换描述和%ld转换描述解释的值也是不同的。最后的结果是一个没有意义的值。

  第一行还解释了前面提到的内容:当用作printf()参数时,float类型的值将被转换为double类型。在这个系统中,dloat是4个字节,但是为了让printf()正确显示修改,n1被扩展到8个字节。

  第2行的输出显示,只要使用正确的转换指令,printf()就可以打印n3和n4。

  第3行的输出显示,如果printf()语句中存在其他不匹配,及时正确地使用转换描述也会产生错误的结果。使用%ld转换显示打印浮点数会失败,但是在这里,用%ld打印long类型的书也会失败。这涉及到一个叫做参数传递的概念。

  printf("%ld%ld%ld%ld\n ",n1,n2,n3,n4);这个调用告诉计算机将变量n1、n2、n3和n4的值传递给程序。将程序传入的值放入称为堆栈的内存区域。根据计算机变量的类型(不是转换指令)将这些值放入堆栈。所以n1存放在堆栈中,占8个字节(float类型转换为douuble类型)。类似地,n2在堆栈中占用8个字节,而n3和n4分别在堆栈中占用4个字节。然后,控制传递给printf()函数。这个函数根据转换规范(不是根据变量类型)从堆栈中读取值。%ld转换指令指示printf()应读取4个字节,因此printf()读取堆栈中的前4个字节作为第一个值。这是n1的前半部分,它将被解释为long类型的整数。根据下一条%ld转换指令,printf()正在读取4个字节,这是n1的后半部分,将被解释为long类型的第二个整数。同样,n2的前半部分和后半部分按照3、4% LD,printf()读取,并解释为两个长整数。因此,对于n3和n4,即使转换描述是正确的,printf()也会读取错误的字节。

  转载请联系作者取得授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: