C連載8-Printf中格數輸出的不一樣樣式以及原理分析

1、不一樣輸出格式會有不一樣的結果git

1.%ld   用於long類型的值,若是系統中int和long大小相同,使用%d就能夠,這樣的程序被移植到其餘系統(int和long類型的大小不一樣)。github

2.一樣x和o​前面也能夠使用l來修飾。小程序

3.對於short類型,前面就是使用h來​當前綴。微信

4.h和l前綴均可以和u一塊兒連用​,用於表示無符號的類型。例如:%lu學習

 

/*print2.c  --更多printf()的特性*/

#include<stdio.h>

int main(void) {

  unsigned int un = 300000000;/*int爲32位和short爲16位的系統*/

  short end = 200;

  long big = 65537;

  long long verybig = 1234567890642;

​

  printf("un= %u and not %d \n", un, un);

  printf("end = %hd and %d \n", end, end);

  printf("big = %ld and not %hd", big, big);

  printf("verybig = %lld and not %ld \n", verybig, verybig);

​

  return 0;

}

​分析:大數據

(1)從上面生成的數據來看,第一行中是由於30000000這個​數字在系統內部存儲的方式是同樣,只不過咱們使用了不一樣的打印方式,因此獲得了不一樣的結果。在待打印的值大於​有符號值的最大值的時候會出現這種狀況。ui

(2)第二行,中的疑問,C編譯器會把short類型自動轉換成int類型的值,爲何呢?spa

由於int類型被認爲是計算機處理整數類型最高效的類型。.net

(3)​那麼這裏的h修飾符又有什麼做用呢?code

使用h修飾能夠顯示較大整數被截斷成short類型值的狀況,例如​:65537以二進制的形式表示爲000000000000010000000000001,使用%hd只會查看後面16位的狀況​;

​插曲:

今天晚上裝上了Visual studio 2019,可是寫了一個小程序,就是編譯報錯

​報錯:找不到​..........exe文件,通過多方求證,搞了半天才搞對。

咱們新建一個「空項目」(不是其餘的選項哦​!!)

 

 

而後建立一個空項目以後,而後右鍵點擊「源文件」,選擇C++項目,(咱們這裏能夠手動改爲C項目,就是​後綴名直接改爲.c既可),而後編輯代碼,咱們先要點擊生成(build)-生成解決方案(build solution)以後,而後在點擊直接運行就能夠正常運行了,若是咱們不先點擊​生成解決方法,就會報錯。​

3、源碼:

D8_1_print.c

https://github.com/ruigege66/CPrimerPlus/blob/master/D8_1_print.c

D7_toobig.c

https://github.com/ruigege66/CPrimerPlus/blob/master/D7_toobig.c

2.CSDN:https://blog.csdn.net/weixin_44630050

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關注微信公衆號:傅里葉變換,我的帳號,僅用於技術交流,後臺回覆「禮包」獲取Java大數據學習視頻禮包

 

相關文章
相關標籤/搜索