C语言中,定义long double变量占几个字节型变量a,输出a的值时用什么格式符才对,%f为啥出错?

 上传我的文档
 上传文档
 下载
 收藏
粉丝量:258
该文档贡献者很忙,什么也没留下。
 下载此文档
C语言基础题及答案2
下载积分:1000
内容提示:C语言基础题及答案2
文档格式:DOC|
浏览次数:138|
上传日期: 07:21:37|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
C语言基础题及答案2
关注微信公众号C语言中输出long long型数据怎么输出_百度知道
C语言中输出long long型数据怎么输出
我有更好的答案
C语言中输出long long型数据使用%lld格式输出的方法:1、 long long 是C99标准对整型类型做的扩展,每个long long类型的变量占8字节,64位。其表示范围为-5807。2、long long 类型输出的时候,需要用printf函数,用%lld格式输出。 示例代码如下:long long a = 1234;printf(&a=%lld\n&, a)。3、输出的各种可用于%d上的格式控制,均可用于%lld上,比如%10lld,表示输出占十位宽度等。如何 用printf输出long double型的 数据?1、%f 是输出 float 型变量;%f 是输出 double 型变量;%Lf 是输出 long double 型变量2、在C语言中,对于数值类型只有通过printf类函数输出这一种方式,比如printf, sprintf, fprintf等。这类函数输出时要求有格式符号,其中long double的格式符号为%Lf以下是一个简单的参考代码,输出到标准输出设备。3、#include &stdio.h&int main(){long double v = 1.23;printf(&%Lf\n&, v);//采用%llf格式输出long double 类型return 0。
采纳率:100%
使用%lld格式输出。 一、 long long 是C99标准对整型类型做的扩展,每个long long类型的变量占8字节,64位。其表示范围为-5807。二、long long 类型输出的时候,需要用printf函数,用%lld格式输出。 示例代码如下:long long a = 1234;printf(&a=%lld\n&, a);三、输出的各种可用于%d上的格式控制,均可用于%lld上,比如%10lld,表示输出占十位宽度等。
c语言中有一个和long long类型想同的类型是__int64,他使用的格式是%I64d如果是long long 那么格式是%lld
本回答被网友采纳
%lld,例如:long&long&a;printf(&%lld\n&,a);
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。与《》相关:
- Copyright & 2017 www.xue63.com All Rights ReservedC语言中的printf用%d输出float类型数据出现或以%f输出int型数据的结果为什么是0
*******************************float类型%d输出**************************************
& & & float
如果用printf("%d",a);输出的是0。&
但float型用%d输出是否一定是0呢,答案肯定不都是0;
& & & 为什么 7.5
用%d输出的是0?分析如下:
首先来了解下printf的输出格式,int 和 long int 都是32位的,用%d输出;float 、double都是%f输出,但
float 是32位的,double 是64位的,所以在参数传递的时候C语言统一将 float 类型数值传换为 double
类型再传入 printf 函数。如果是32位整型则输出格式为%lld。
& & & 下面来讲一下
&float a=7.5
printf("%d",a)输出为0的情况:
%d只输出低32位的数据,并将这些32位二进制以十进制数输出,编译器首先将
7.5从float类型转换为double类型,7.5在内存中的存放方式是0x40f00000,转换成double类型在内存中的数据就是这个0x401e,这个内存数据可以很明显看出低32位全是0,而%d则只能截取到低32位,所以这个以%d输出7.5的数值当然是
0了。如大家不相信可以用%lld
输出看看,这个%lld就很读到低64位数据,读出的结果就是0x401e,在屏幕上看到一个很大的十进制数。
如果我一定要输出7.5在内存中的存放方法怎么办呢?
可以用printf("%d",*(int
*)&a);这里做了一下处理,不是直接把a传进来,把a所在地址里的内容处理了一下,不管a是什么类型,只对地址进行操作,利用(int
*)&a,将a所在地址中的内容0x40f00000直接当成 int 类型传给printf,int
的类型数据不会再转成double类型了,所以输出正常,这个只是针对浮点型数据只占低32位,如果输出64位还得用%lld格式控制输出。
如果用printf("%d",(int)a),输出行不行,这个强制类型转换只针对a的数据类型进行转换,7.5转换 int
类型是7,而上面的*(int
*)&a,是对内存中的实际存储数据进行操作,蔽开数据类型这一层面,只将这个数据0x40f00000直接转成int类型输出。而(int)a,要先看a的类型,C语言会根据所要数据类型,对内存存储的数据进行改变,以便可以用int类型正确解析内存数据。
如果用printf("%d",(float)a),输出什么,输出的是0,这个只是将a的float类型还转成float类型,还是自动转成doube类型,传给printf函数。
为什么float非要转成double类型呢,因为printf格式控制浮点型输出只有%f,所以统一按doube类型输出,不像整型有32位的%d或%ld,64位的有%lld,这就将32位整型和64位整型用不同的格式控制分开了,而%f则没有,所以printf输出的浮点数其实是统一遍历了64位内存,如果float传入printf没有进行转换,那么printf输出高32位数据将不可预知,printf输出结果也就不正确了,因此传入printf的浮点数都会被编译器隐含转成double类型。
***********************int类型%f格式输出************************************
& & & 如果定义了int
a=0x40f00000;用printf("%f",a)输出的结果是多少呢?
答案是0,至少我们看的屏幕上显示的是0.000000,实际值可不是0啊,只是我们显示的精度只能有15位小数,而实际的数据可能很小很小,0.0000....000几百个0后会有几个有效数据,我们分析一下。
首先C语言把a传进printf,因为a是整型,所以不会自动转成double型数据,直接将0x40f00000传进printf,而%f寻的是64位内存,也就是把0xf00000这个内存中的数据当成浮点型输出来,那浮点型的数据是多少呢,又是怎么存储的呢?
64位浮点数的存放方式:
& & & 63位
& & 62~52位 &
& & & 1个符号位
&11个阶数 & &
从0xf00000来看
1)符号位是0,表示正
& & 2)阶数是0,表示-1023 + 1023 =
0,用指数表示:1.#*2^-1023,‘#’是代表尾数。
3)尾数就是,0x00
4)浮点二进制表示
&2#1.0000*2^(-1023),-1023次方可想而知有多小。
这就是为什么我们的int型数据用%f输出是0.000000的原因。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。豆丁微信公众号
君,已阅读到文档的结尾了呢~~
精品:c语言输入输出函数 c语言输出函数 c语言输入函数 c语言库函数 c语言随机函数 c语言输入输出 c语言函数 c语言字符串函数 c语言函数调用 c语言数学函数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C语言的输出输入函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 double是什么变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信