C语言中printf()函数全解析

来源:互联网 发布:中信证券手机交易软件 编辑:程序博客网 时间:2024/06/06 15:48

printf()函数是将数据输出到屏幕上的,其参数分为   转换说明+变量列表,两部分。


1、转换说明由百分号开头,并在双引号中,例如“%d”,表示打印一个int型。

    转换说明主要包括以下几种

   %c(一个字符),%d(有符号十进制),%e(浮点数e表示),%E(浮点数E表示),%f(浮点数十进制法)   %i(有符号十进制),%o(无符号8进制),%p(指针,16进制打印地址),%s(字符串),%u(无符号十进制)   %x(十六进制),%%(一个百分号)。

2、在转换说明符和%之间还会有一些修饰符

    主要包括以下几种。

    %hd / %hu / %hx 之类,h表示打印的是一个short类型的值。

    %hhd之类,表示打印的是一个char型的值。

    %ld之类,表示打印的是一个long型的值。

    %lld之类,表示打印的一个long long型的值。

    %Lf之类,表示打印的是一个double型的浮点。

    最重要的一类:

      %5.3

小数点前面的是字段宽度,如果后面的变量宽度不足时,右对齐,在左边会补充空格,变量宽度足够时,自动扩充字段宽度,如果%-5,则变成左对齐,不足时右边补空格。

小数点后的,对浮点,整型(int ,short, long ,long long,char),字符串有不同的意义:

浮点:.3表示浮点数的小数部分显示3位,不足补0,多余舍去。例如对3.33,%.3f 打印3.330,%.1f 打印3.3

整型:.3表示整型部分所占的最小位数,不足左边加0,例如333,%.4d 打印0333,%.1d打印333。

字符串:.3表示打印的字符的最大个数,最多只能显示3个字符。例如,"abc",%.4s 打印abc,%.2s打印ab。



3、实现机制,类型换转,运算顺序,溢出,等等。

       printf对于右边的变量是用一个栈来存储的,最左边的在栈底,最右边的在栈顶

       先从栈顶开始依次按照转换说明(多占的字节数)来读取,直到所有的转换说明都输出完毕。不对转换说明和变量的数量和类型进行检查。

        对于所有的整型除了longlong以外,其他的int ,short, long,char都是先将其2进制表示的值扩展为32位,存储在栈中,longlong是按照64位2进制保存。在输出的时候也是按照这个位数大小在栈中按照顺序读取2进制值,再转换为相应的值输出。char也是读取32位,然后在截取底8位。

       还有一个需要注意的地方,一般计算机都是小端模式,即低位存放在底地址,高位存放在高地址(大端模式相反)。栈中,longlong类型的低32位存放在高32位下面。例如:  

long long ll=0x0000000100000002;    printf(" %d, %d\n",ll);

         栈中的低32位存储着0x00000002,高32位存储着0x00000001,在输出的时候高32位的值给第二个%d,低32位的值给第一个%d。这样输出就为  2,1。

        对于浮点数,printf在存储和读取都都默认转换为64的double型。


       变量为表达式时,同样从左到右入栈,在输出时,从右向左出栈,所以右边的表达式先计算。

例如: printf(" %d, %d\n", i, i=i+3);左边的i是加3后的值。

原创粉丝点击