C语言中的%%%d和%%%
一.有这两个例子1.inta=1;printf("%%%d",a);这时候的输出结果是%1;2.inta=1;printf("%%%",a);这时候的输出结果是%%.如果...
一.有这两个例子
1. int a=1; printf("%%%d",a);这时候的输出结果是%1;
2. int a=1; printf("%%%",a); 这时候的输出结果是%%.
如果按第二种情况看,三个百分号输出两个百分号,那么第一种情况的输出结果不是应该是:%%d吗?
第一种情况,为什么不是先输出两个百分号,而是输出一个之后剩下的%会和d结合形成格式符?
这两种情况要怎么区别?
二.单精度型的数据在输出时小数位数是6位.但是提供给它的有效数字是7位
这两者矛盾吗?
双精度型数据在输出时小数位数也是六位吗?但是有效数字是15-16位,这两者要怎么区别?
举个例子说:1,float a=11124.2569766841;printf("%f",a); 结果是11124.256836
为什么只提供7位有效数字却有那么多位数?而且后面几位还和原数不一样?
2.double a=11124.2569766841; printf("%lf",a); 结果是11124.256977
以上1和2这两个结果各是怎么得出的?
3.float a=11124.2569766841;printf("%e",a); 结果是1.11243e+04.
4.double a=11124.2569766841; printf("%e",a);结果是1.11243e+04.这个情况为什么答案相同?小数位数为什么不是六位而是总宽度六位?
也就是说,什么情况下输出的小数位数是6位,什么情况下输出的总宽度是6位?这些要怎么区别开?
三.例如:float a=11124.2569766841;printf("%g",a);结果是11124.3. double a=111124.2569766841; printf("%g",a); 结果也是11124.3。
%g是按最小宽度输出,这么看来float和double最小宽度是7位吗?为什么double的最小宽度不会比float长?
四.int a=32767; printf("%p",a); 结果是7FFF。P是输出内存变量地址,为什么是这个结果?%P的输出在C语言二级考试中会考吗?
五.反码: 11111010
+ 1
_____________
补码: 11111011
我知道是根据逢二进一算出的,但是这个过程具体是怎么算的?逢二进一的话应该会有很多零啊.
问题很多,希望各位知道哪些就回答哪些,一两个也没关系,拜托了.
一.第一个问题,我知道输出的结合方式,我不是问这个.有一种题目:int a; pintf("%%d",a);输出结果是%d.这个时候的%并没有和d结合.所以为什么int a; pintf("%%%d",a);的结果不是%%d?而是最后一个%会和d结合成格式符.
二.第二个问题中的1,2我已经知道了,不用回答.3,4中按%e输出的结果是:1.11243e+04.总宽度是六位,这是规定好的吗?
三.第三和四个问题也不用回答了.
四:11111010是反码,加了1成补码11111011.这个计算过程是怎么样的,我知道是逢二进一,我要的是具体的计算过程,是怎么样逢二进一的.拜托各位了 展开
1. int a=1; printf("%%%d",a);这时候的输出结果是%1;
2. int a=1; printf("%%%",a); 这时候的输出结果是%%.
如果按第二种情况看,三个百分号输出两个百分号,那么第一种情况的输出结果不是应该是:%%d吗?
第一种情况,为什么不是先输出两个百分号,而是输出一个之后剩下的%会和d结合形成格式符?
这两种情况要怎么区别?
二.单精度型的数据在输出时小数位数是6位.但是提供给它的有效数字是7位
这两者矛盾吗?
双精度型数据在输出时小数位数也是六位吗?但是有效数字是15-16位,这两者要怎么区别?
举个例子说:1,float a=11124.2569766841;printf("%f",a); 结果是11124.256836
为什么只提供7位有效数字却有那么多位数?而且后面几位还和原数不一样?
2.double a=11124.2569766841; printf("%lf",a); 结果是11124.256977
以上1和2这两个结果各是怎么得出的?
3.float a=11124.2569766841;printf("%e",a); 结果是1.11243e+04.
4.double a=11124.2569766841; printf("%e",a);结果是1.11243e+04.这个情况为什么答案相同?小数位数为什么不是六位而是总宽度六位?
也就是说,什么情况下输出的小数位数是6位,什么情况下输出的总宽度是6位?这些要怎么区别开?
三.例如:float a=11124.2569766841;printf("%g",a);结果是11124.3. double a=111124.2569766841; printf("%g",a); 结果也是11124.3。
%g是按最小宽度输出,这么看来float和double最小宽度是7位吗?为什么double的最小宽度不会比float长?
四.int a=32767; printf("%p",a); 结果是7FFF。P是输出内存变量地址,为什么是这个结果?%P的输出在C语言二级考试中会考吗?
五.反码: 11111010
+ 1
_____________
补码: 11111011
我知道是根据逢二进一算出的,但是这个过程具体是怎么算的?逢二进一的话应该会有很多零啊.
问题很多,希望各位知道哪些就回答哪些,一两个也没关系,拜托了.
一.第一个问题,我知道输出的结合方式,我不是问这个.有一种题目:int a; pintf("%%d",a);输出结果是%d.这个时候的%并没有和d结合.所以为什么int a; pintf("%%%d",a);的结果不是%%d?而是最后一个%会和d结合成格式符.
二.第二个问题中的1,2我已经知道了,不用回答.3,4中按%e输出的结果是:1.11243e+04.总宽度是六位,这是规定好的吗?
三.第三和四个问题也不用回答了.
四:11111010是反码,加了1成补码11111011.这个计算过程是怎么样的,我知道是逢二进一,我要的是具体的计算过程,是怎么样逢二进一的.拜托各位了 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询