C語言面試題 位域及大小端模式的理解

2021-06-07 13:50:03 字數 817 閱讀 5700

這裡涉及大小端的問題,我記為

「小高高,小弟弟(低低)」,就是:

「小端模式,是指資料的高位儲存在記憶體的高位址中,資料的低位儲存在記憶體的低位址中」

這是記小端模式的,有點黃,不過好記!那麼大端模式就和這個相反嘍!!~~

接下來就看一道面試題:

#includestruct mybitfields

test;

int main()

a佔4個bit、b佔5個bit、c佔7個bit,總共16bit,大小和short的一樣大!執行完下面的三條語句之後
test.a=2;

test.b=3;

test.c=0;

記憶體分布如下:

這裡x86是小端模式,所以資料分布式上面的,而不是我們理所當然的0010 00011 0000000!

i=*((short *) &test);
這句話執行之後:把test整個轉換成乙個short的變數,然後再賦值給int型的i,i能夠容納*((short*) &test),那麼i的值就是

那麼i的值就是1*32+1*16+2=50嘍!計算式以0x(00.....00110010)計算哦!~~

以上執行的結果是在x86平台下,編譯器是mingw。

C語言面試題 位域及大小端模式的理解

這裡涉及大小端的問題,我記為 小高高,小弟弟 低低 就是 小端模式,是指資料的高位儲存在記憶體的高位址中,資料的低位儲存在記憶體的低位址中 這是記小端模式的,有點黃,不過好記!那麼大端模式就和這個相反嘍!接下來就看一道面試題 includestruct mybitfields test int ma...

玩兒轉C語言 bit 位域大小端轉換及傳輸

由於不同的計算機系統可能存在不同的大小端模式,所以不同的體系系統間通訊就需要進行大小端轉換。任何在不同系統間的通訊資訊都經過網路位元組 大端 序進行傳輸,也就是說不管本機是什麼模式,都要保證傳送端傳輸的資料轉換為網路序,接受端都要把網路序的資料轉換為本地序。16bit和32bit的大小端轉換很常見,...

C語言面試題分類 位運算

1.不用臨時變數交換兩個整數。a a b b a b a a b 2.實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如9的二進位制是1001,則輸出2。int check count fun int number return count int main 錯誤 如下 有符號數會造成...