【CS:APP】2.1 信息存儲

版權(quán)聲明:本文為 gfson 原創(chuàng)文章概疆,轉(zhuǎn)載請注明出處。
注:作者水平有限惨缆,文中如有不恰當(dāng)之處,請予以指正丰捷,萬分感謝坯墨。

1. 進(jìn)制間兩個轉(zhuǎn)化技巧

P62.png

2. int32_t 和 int64_t

P64-1.png

3. 多種形式的聲明

P64-2.png

4. C 語言數(shù)據(jù)類型分配字節(jié)數(shù)

P63.png

5. 大端和小端

P65.png

6. 不同程序?qū)ο蟮淖止?jié)表示

#include <stdio.h>  

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len){
    size_t i;
    for(i=0;i<len;i++)
        printf(" %.2x",start[i]);
    printf("\n");
}

void show_int(int x){
    show_bytes((byte_pointer) &x, sizeof(int));
}

void show_float(float x){
    show_bytes((byte_pointer) &x, sizeof(float));
}

void show_pointer(void *x){
    show_bytes((byte_pointer) &x, sizeof(void *));
}

void test_show_bytes(int val){
    int ival = val;
    float fval = (float) ival;
    int *pval = &ival;
    show_int(ival);
    show_float(fval);
    show_pointer(pval);
}

int main(void){
    int a = 10;
    test_show_bytes(a);
    return 0;  
}

運(yùn)行結(jié)果如下:

swd1@user-HP-ProDesk-600-G1-TWR:/local/work/test/C$ gcc test.c
swd1@user-HP-ProDesk-600-G1-TWR:/local/work/test/C$ ./a.out 
 0a 00 00 00
 00 00 20 41
 40 cb 10 b2 ff 7f 00 00
swd1@user-HP-ProDesk-600-G1-TWR:/local/work/test/C$ 

從以上結(jié)果可以得出兩個結(jié)論:

  1. Linux 64 位操作系統(tǒng)使用的是小端法存儲。
  2. Linux 64 位操作系統(tǒng)的 int 和 float 類型占 4 個字節(jié)病往,指針類型占 8 個字節(jié)捣染。

7. 生成一張 ASCII 表

通過命令 man ascii 生成一張 ASCII 表。

8. 字符串表示

P70.png

9. 布爾環(huán) a^a = 0

P72-1.png

10. 位向量表示有限集合

P72-2.png
  • 位向量就是固定長度為 ω停巷,由 0 和1 組成的串耍攘。
  • a = [011010101]榕栏,從右往左數(shù),從 0 開始蕾各,第 i 位的數(shù)字是 1扒磁,則 i 為集合的元素。
  • 這種位向量表示的集合示损,布爾運(yùn)算 | 和 & 分別對應(yīng)集合的并和交渗磅,而 ~ 對應(yīng)與集合的補(bǔ)。

11. 交換兩個變量的值

P74.png

兩個練習(xí)題的答案如下:

P135.png

函數(shù) inplace_swap(int *x, int *y) 隱含要求 x 和 y 指向不同的地址检访,可以對此函數(shù)進(jìn)行如下修改:

void inplace_swap(int *x, int *y){
    if(x != y){
        *y = *x ^ *y;
        *x = *x ^ *y;
        *y = *x ^ *y;
    }
}

12. 位運(yùn)算兩個有趣的問題和一些結(jié)論

首先上一張布爾代數(shù)運(yùn)算的圖。

P71.png

然后再來看看下面兩個有趣的問題(練習(xí)題 2.12 和 2.13):

P75-1.png

思考過這個兩個問題后仔掸,我們來看看答案:

P136.png

我們會發(fā)現(xiàn)幾個有趣的結(jié)論:

  1. 基礎(chǔ)結(jié)論:
  • 0 & 0 = 0; 1 & 0 = 0; 即任意位和 0 與為 0脆贵。
  • 0 & 1 = 0; 1 & 1 = 1; 即任意位和 1 與為其本身。
  • 0 | 1 = 1; 1 | 1 = 1; 即任意位和 1 或為 1起暮。
  • 0 | 0 = 0; 1 | 0 = 1; 即任意位和 0 或為其本身卖氨。
  • 0 ^ 0 = 0; 1 ^ 0 = 1; 即任意位和 0 異或為其本身。
  • 0 ^ 1 = 1; 1 ^ 1 = 0; 即任意位和 1 異或為其取反负懦。
  1. 練習(xí)題 2.12 的帶來的思考:
  • 如果想要字節(jié)位為 0筒捺,可以考慮 & 0
  • 如果想要字節(jié)位為 1纸厉,可以考慮 | 1系吭。
  • 如果想要字節(jié)位取反,可以考慮 ^ 1颗品。
  • 如果想要字節(jié)位保持不變肯尺,可以考慮 & 1| 0躯枢、^ 0则吟。
  1. 練習(xí)題 2.13 帶來的思考:
    通過文氏圖證明 x ^ y = (x & ~y) | (~x & y) 如下:
  • x ^ y 用文氏圖表示如下:


    x^y.png
  • ~x 用文氏圖表示如下:


    ~x.png
  • (~x & y) 用文氏圖表示如下:


    ~x & y.png
  • 同理,(x & ~y) 的文氏圖為左半邊锄蹂,(x & ~y) | (~x & y) 的文氏圖與 x ^ y 的文氏圖相同氓仲。

13. C 語言的邏輯運(yùn)算

P75-2.png

P76-1.png
  • 邏輯運(yùn)算中非零的參賽都表示 TRUE,參數(shù) 0 表示 FALSE得糜。
  • 邏輯運(yùn)算返回 1 或者 0敬扛,1 表示 TRUE,0 表示 FALSE掀亩。
  • 如果第一個參數(shù)的值可以確定整個表達(dá)式的值舔哪,那么不會計算第二個參數(shù)的值。

14. 易混淆 ~ 和 槽棍!

x = 0x66, y = 0x39.
求 x & !y 和 x && ~y 的值捉蚤。

上述問題中抬驴,需要注意 ! 是邏輯運(yùn)算中的非缆巧,~ 是位運(yùn)算中的取反布持。

x & !y = 0x00, x && ~y = 0x01.

15. 移位運(yùn)算

P76-2.png

P77.png
  • 邏輯右移和算術(shù)右移

    • 邏輯右移:在左端補(bǔ) k 個 0。
    • 算術(shù)右移:在左端補(bǔ) k 個最高有效位的值陕悬。
  • 幾乎所有編譯器 / 機(jī)器組合都對有符號數(shù)使用算術(shù)右移题暖,對于無符號數(shù),必須使用邏輯右移捉超。

  • Java 中 >> 表示算法右移胧卤,>>> 表示邏輯右移。

  • 當(dāng)移動的位 k 大于 w 時拼岳,實際位移量通過計算 k mod w 得到枝誊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惜纸,隨后出現(xiàn)的幾起案子叶撒,更是在濱河造成了極大的恐慌,老刑警劉巖耐版,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祠够,死亡現(xiàn)場離奇詭異,居然都是意外死亡粪牲,警方通過查閱死者的電腦和手機(jī)古瓤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虑瀑,“玉大人湿滓,你說我怎么就攤上這事∩喙罚” “怎么了叽奥?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長痛侍。 經(jīng)常有香客問我朝氓,道長,這世上最難降的妖魔是什么主届? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任赵哲,我火速辦了婚禮,結(jié)果婚禮上君丁,老公的妹妹穿的比我還像新娘枫夺。我一直安慰自己,他們只是感情好绘闷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布橡庞。 她就那樣靜靜地躺著较坛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扒最。 梳的紋絲不亂的頭發(fā)上丑勤,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機(jī)與錄音吧趣,去河邊找鬼法竞。 笑死,一個胖子當(dāng)著我的面吹牛强挫,可吹牛的內(nèi)容都是我干的岔霸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼俯渤,長吁一口氣:“原來是場噩夢啊……” “哼秉剑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起稠诲,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诡曙,沒想到半個月后臀叙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡价卤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年劝萤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慎璧。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡床嫌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胸私,到底是詐尸還是另有隱情厌处,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布岁疼,位于F島的核電站阔涉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捷绒。R本人自食惡果不足惜瑰排,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暖侨。 院中可真熱鬧椭住,春花似錦、人聲如沸字逗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至傻挂,卻和暖如春乘碑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背金拒。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工兽肤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绪抛。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓资铡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對java的編譯器有特殊的意義形真,他們用來表示一種數(shù)據(jù)類型呼伸,或...
    哈哈哎呦喂閱讀 661評論 0 0
  • [學(xué)習(xí)信息的存儲(編碼)和處理有什么用?] 研究數(shù)字在計算機(jī)中是如何存儲的六孵,以及值的范圍和算術(shù)屬性,有助于我們跨越...
    唐魚的學(xué)習(xí)探索閱讀 3,075評論 4 11
  • 版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請注明出處闹啦。注:作者水平有限,文中如有不恰當(dāng)之處辕坝,請予以指正窍奋,萬分感謝...
    gfson閱讀 1,195評論 1 1
  • 每個人都有他的不容易,換位思考世界更美好 準(zhǔn)備晚飯時酱畅,本來饃和湯都好了琳袄,就差炒菜了,孩子們說想吃雞蛋餅纺酸,我就開始準(zhǔn)...
    春雨小溪閱讀 176評論 0 0
  • “她依舊“不知道為什么看見這三個字就有一種說不出的感覺窖逗,有種時光積淀卻不忘初心的味道,所以默默地把網(wǎng)名改成了它...
    顏珺雯閱讀 597評論 0 2