天天看點

深入了解計算機系統-之-數值存儲(二)--C程式列印變量的每一位元組或者位 大端與小端 列印變量的的每一個位元組 列印變量的的每一個位

前面我們提到了依據cpu端模式的不同,資料的存儲順序也不一樣。

采用大小模式對資料進行存放的主要差別在于在存放的位元組順序,<code>be big-endian 大端模式</code> ,最直覺的位元組序 ,位址低位存儲值的高位,位址高位存儲值的低位 ,不需要考慮對應關系,隻需要把記憶體位址從左到右按照由低到高的順序寫出 ,把值按照通常的高位到低位的順序寫出 ,兩者對照,一個位元組一個位元組的填充進去

<code>le little-endian 小端模式</code>,最符合人的思維的位元組序,位址低位存儲值的低位,位址高位存儲值的高位 ,怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說,低位值小,就應該放在記憶體位址小的地方,也即記憶體位址低位 反之,高位值就應該放在記憶體位址大的地方,也即記憶體位址高位。

但是理論我們已經講的很詳細了,卻沒有真正看過資料的存儲結果,是以我們期待能夠利用c語言編寫程式輸出變量的的每一位

思路: c語言中char 必須對應一個byte , 是以它的類型固定是1個位元組。 用一個char*的指針指向變量的首位址,往後順序讀取sizeof個位元組的資料,就可以通路到變量的每一位

首先我們判斷一下目前電腦的大小端模式,然後分别定義了short,int,long,float,double,array數組幾種類型的資料。

然後分别列印了它的每一個位元組的資訊。

深入了解計算機系統-之-數值存儲(二)--C程式列印變量的每一位元組或者位 大端與小端 列印變量的的每一個位元組 列印變量的的每一個位

前面通過char我們可以讀取到變量的每個位元組,我們進一步拓展,讀取每一個位元組後,再取出其對應的每一位,即可按照二進制的方式輸出每個位。

讀取每一位的操作,即判斷某一位是1還是0,可以采用位運算完成,具體操作如下。

是以我們對上面的算法進行拓展,先取到每一個byte,然後再讀取該byte的每一個bit。

深入了解計算機系統-之-數值存儲(二)--C程式列印變量的每一位元組或者位 大端與小端 列印變量的的每一個位元組 列印變量的的每一個位

轉載:http://blog.csdn.net/gatieme/article/details/50687118

繼續閱讀