printf - 函式進階格式轉換說明
来源:互联网 发布:域名访问出错升级中 编辑:程序博客网 时间:2024/04/29 05:02
二進位轉為字元格式
printf() 函式最主要的功能是將各種型態的變數內之資料以字元的格式顯示在螢幕上,例如:
- int ix=76;
float fx=1.25e8;
char cx = 'C';
printf("ix=%d %x, fx=%f cx=%c %d %x",ix,ix,fx,cx,cx,cx);
其列印結果如下:
- ix=76 4c, fx=125000000.000000 cx=C 67 43
除了將字元變數以字元格式顯示到螢幕上時,完全不需要做任何轉換,其他的列印工作都需要做格式的轉換,例如:
- int ix=81;
printf("%d",ix);
其實很簡單:
- 步驟一:
81 = 8*10 + 1 (除以 10 得到商數 8,餘數 1)
這個餘數 1 必須轉為 ASCII 的字元 '1',
可以利用下面程式片段來轉換- int remainder;
char c;
remainder = ix % 10;
c = remainder + '0';
putchar(c); - 步驟二:
步驟一的商 8 = 0*10 + 8 (除以 10 得到商數 0,餘數 8)
這個 8 必須轉為 ASCII 的 '8',
可以利用下面程式片段來轉換- quotient = ix / 10;
remainder = quotient % 10;
c = remainder + '0';
putchar(c);當然這只是一個示範性的程式,你要設計的話要加上迴圈的控制,如此程式才能處理任意位數的轉換工作。有興趣的話,請你寫寫看這個列印整數的程式,你也可以嘗試寫一個用十六進位列印整數的程式
printf() 的參數如何工作
printf() 函式在 stdio.h 內的宣告如下:- int _cdecl printf(const char *__format, ...);
- "%d %ld %x %lx %f %lf %c %u %lu"
- 二個位元組:(unsigned) char, short, int, 常數 5, 字元常數 'c'
- 四個位元組:(unsigned) long, 常數 5L
- 八個位元組:float, double, 常數 1.0
參考下例:
printf() 函式則依照格式字串中的各種格式以下列規則由傳入的參數位元陣列中依序轉換各個參數:
- %c: 2 bytes
- %d: 2 bytes
- %ld: 4 bytes
- %x: 2 bytes
- %lx: 4 bytes
- %u: 2 bytes
- %lu: 4 bytes
- %f (%lf): 8 bytes
注意:在 32 位元的 C 編譯器上 ld 與 d 相同,lx 與 x 相同,
萬一程式設計者沒有將兩者對齊的話就一定會出錯,例如:
- printf("%x", 0xaabbccddL); 得到 ccdd
- printf("%x %x",0xaabbccddL,0x01); 得到 ccdd aabb
0 0
- printf - 函式進階格式轉換說明
- printf格式
- printf格式
- printf格式
- printf格式
- printf格式
- printf 格式
- printf格式
- printf格式
- printf()格式
- printf 格式
- printf输出格式
- Printf()输出格式控制
- printf格式控制符
- Printf()输出格式控制
- printf输出格式
- printf输出格式
- printf 的打印格式
- a different object with the same identifier value was already associated with the session
- DZY Loves Fibonacci Numbers
- POJ 1797 Heavy Transportation(连通性问题)
- CSDN开源夏令营项目进入第一实习期,入选名单和优秀开题报告推荐名单公布
- 面试算法(二十六)二叉搜索树与双向链表
- printf - 函式進階格式轉換說明
- 第二章 BIRT设计器概述及本地化支持
- Android开发常用工具方法(CommonTools)
- 虚拟机centos下安装tomcat7.0
- 数学之美系列 二十三 输入一个汉字需要敲多少个键 — 谈谈香农第一定律
- [LeetCode]Best Time to Buy and Sell Stock II
- MyBatis学习【三】CRUD测试之修改操作
- 第二章 BIRT设计器概述及本地化支持(续)
- Interface Layer