1. 程式人生 > 實用技巧 >牛客網刷題閉坑 【printf列印】

牛客網刷題閉坑 【printf列印】

在這裡插入圖片描述

printf函式執行的時候,會先把這三個數字壓入棧裡,然後再執行列印。壓入棧的時候按照資料本身的長度來,首先把c和b壓入,並且每一個都是8個位元組(printf自動轉化為double)。然後再壓入a是4個位元組。然後再執行列印。列印的時候按照使用者指定的格式來出棧。首先列印a,a列印正常。然後又列印4個位元組長度的b,在棧裡面由於b長度是八個位元組,並且b目前是64位的表示方式,資料的後面全是0.(float 變double),電腦是小端儲存方式,0儲存在距離a近的地方。列印b的時候,列印的4個位元組都是0.然後再列印c,c用正常的方式列印,會一下子讀取8個位元組,正好,讀出來的八個位元組前面四個位元組全是0,自己可以算一下,實在太小了,因此為0.

棧底 棧頂
高位元組。。。。。。。。。。。低位元組
4321 0000 765 0000 98
4位元組 4位元組 4位元組 4位元組 4位元組
列印c 列印b 列印a
附:浮點數(單精度的float和雙精度的double)在記憶體中以二進位制的科學計數法表示,表示式為N = 2^E * F;其中E為階碼(採用移位儲存),F為尾數。
float和double都由符號位、階碼、尾數三部分組成,float儲存時使用4個位元組,double儲存時使用8個位元組。各部分佔用位寬如下所示:

符號位 階碼 尾數 長度

float 1 8 23 32

double 1 11 52 64

在這裡插入圖片描述