20145221 《信息安全系统设计基础》第3周学习总结
生活随笔
收集整理的這篇文章主要介紹了
20145221 《信息安全系统设计基础》第3周学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
20145221 《信息安全系統設計基礎》第3周學習總結
教材學習內容總結
信息的表示和處理
三種數字表示
- 無符號數:基于傳統的二進制表示法,表示大于或等于零的數字
- 補碼:表示有符號數,可為正可為負的數字
- 浮點數:表示實數的科學計數法的以二為基數的版本
- 整數運算和浮點數運算有不同的數學屬性,因為它們處理數字表示有限性的方式不同,整數的表示雖然只能編碼一個相對較小的數值范圍,但這種表示精確;浮點數編碼數值范圍相對較大,但是近似的。
信息存儲
- 字節:
- 計算機最小的可尋址的存儲器單位——字節
- 一個字節的值域:00H-FFH
- 字:
- 每個計算機都有一個字長,指明整數和指針數據的標稱大小。因為虛擬地址是以這樣的一個字來編碼的,所以字長最重要的系統參數就是虛擬地址空間的最大大小。
- 對于一個字長為w位的機器而言,虛擬地址的范圍為0~2^w-1,程序最多訪問2^w字節。
- w=32或64:也就是我們通常所說的電腦是32位還是64位。也可以理解為CPU一次處理數據的位數。
- 數據大小:
- C99特性:當沒有-m32或-m64參數時,一般情況下會生成跟操作系統位數一致的代碼;gcc -m32 XXX.c可以在64位機上(比如實驗樓的環境)生成32位的代碼。
- 尋址和字節順序:
- 小端法:最低有效字節在前面——“高對高,低對低”。
- 大端法:最高有效字節在前面。
- 理解:我們一般用到的是小端法,比如在X86匯編中我們接觸到的就是小端法。小端法的特點是“高對高,低對低”,但是其每個字節的內部是不變化順序的,這個不需要死記,想想匯編上課時學的內存示意圖,CPU以每個字節為單位尋址,所以字節內部的順序是不變化的。
- 例子:0x1234567,小端法67 45 23 01,大端法:01 23 45 67
- 強制類型轉換
- 代碼參見:pointer.c
- 表示字符串和表示代碼
- 字符串:c語言中字符串被編碼成為一個以null(值為0)字符結尾的字符數組。多使用ASCII字符碼。在使用ASCII字符碼的任何系統上都能得到相同的結果,與字節順序和字大小規則無關,所以文本數據比二進制數據具有更強的平臺獨立性。
- 代碼:二進制代碼在不同的操作系統上有不同的編碼規則,所以二進制代碼是不兼容的。例如:char *使用機器的全字長,在32位中占4個字節,而在64位的機器中則占8個字節。
布爾代數
- 運算符號:
- 與:&&(位與:&)
- 或:||(位或:|)
- 非:!(位非:~)
- 位異或:^
- 位向量:有固定長度為w、由0和1組成的串。
- 位向量的應用——表示有限集合。
- 掩碼運算:掩碼是位運算的重要應用,這里掩碼是一個特定位模式,表示從一個字中選擇一個位的集合。對特定位可以置一,可以清零。
- 例子:任取一個數x=0x123ABCDE,x&0xFF = 0x000000DE
- 有點類似計算機網絡中“子網掩碼”這個概念,可以對照理解。
整數表示
- 整型數據類型
- 表示有限范圍的整數,每種類型都能用關鍵字來指定大小,還可以指定是非負數(unsigned)還是負數(默認)。這些不同大小的分配的字數會根據機器的字長和編譯器有所不同。
- 取值范圍
- 32位機器和64位機器對于同一數據類型的典型取值范圍是有所不同的。
- 典型取值范圍中,取值范圍不對稱——負數的范圍比整數的范圍大1。
- c語言標準定義的每種數據類型必須能夠表示的最小的取值范圍中,正數和負數的取值范圍是對稱的。
- 要用C99標準中的“long long”類型,編譯是要用gcc -std = c99
- 無符號數的編碼
- 編碼方法詳見課本P39,之前學過,不作贅述。
- 對于長度為w的位向量,都有一個唯一的值與之對應;反過來,在0~2^w-1之間的每一個整數都有一個唯一的長度為w的位向量二進制表示與之對應。二者之間存在一個雙射的關系。
- 補碼編碼——有符號數的編碼
- 我們都知道補碼的最高位是表示符號位,解釋為負權,“權重”為-2的(w-1)次方,即無符號表示中的權重的負數。符號位為1,表示值為負,符號位為0,表示值為非負(不是正,因為有0)
- 補碼的映射關系同樣是一一對應的
- 補碼的范圍:-2^(w-1)~2^(w-1)-1,即|TMin|=|TMax|+1——因為非負數中0的存在。
- 無符號數編碼(U)和補碼(T):UMax = 2 TMax + 1
- 大多數情況下用補碼來表示有符號數,并且具有的是典型的取值范圍。
- 有符號數的其他表示方法:
- 原碼
- 反碼
- 相關介紹不在此贅述
- 有符號數和無符號數的轉換
- 處理同樣字長的有符號數和無符號數之間相互轉換的一般規則:數值可能會改變,但是位模式不變。
- c語言允許無符號數和有符號數之間的轉換,轉換的原則是底層的位表示不變。
- 當從無符號數轉換為有符號數是,效果是應用函數U2T,從有符號數轉化為無符號數時,應用函數T2U,其中w表示數據類型的位數。
- 擴展
- 從一個較小的數據類型轉換為較大的數據類型,同時保持數值不變。
- 零擴展:多用于無符號數轉換為一個更大的數據類型。只需在開頭加上0即可。
- 符號擴展:多用于補碼數字轉換,最高有效位是什么,就添加什么。
- 注:無符號和有符號數字之間的轉換,和數據的大小的轉換,這之間的相對順序能夠影響到一個程序的行為。
- 截斷數字
- 不用額外的位來擴展數值,而是減少表示一個數字的位數。而這么做可能會改變它的值,這也是溢出的一種形式。
- 將一個w位的數截斷為k位數字時,就會丟棄高w-k位。
- 對于無符號數來說,就相當于 mod 2的k次冪
- 對于有符號數來說,先按照無符號數截斷,然后再轉化為有符號數
- 具體的公式參見書P52頁。
- 無符號數適用范圍
- 適用于沒有任何數字意義的位的集合,比如地址;
- 又或者實現模運算、多精度運算的時候,數字由字的數組表示的時候。
- 有符號數適用范圍
- 編程中多用有符號數
整數運算
- 無符號運算
- 無符號運算本質上就是模運算,mod 2的w次冪。
- 加法
- 涉及到的相關知識有:交換群(阿貝爾群),單位元,加法逆元等等。計算起來很簡單。
- 乘法
- 兩個w位的無符號數相乘,實際上是截取了低w位,但是等價于mod 2的w次冪。
- 總之就是模冪運算。
- 補碼運算
- 加法運算:兩個數的w位補碼之和與無符號之和有完全相同的位級表示。
- 溢出:
- 補碼加法的溢出情況比無符號運算更為復雜,分為正溢出、正常、負溢出。正溢出就是超過正數的最大范圍,負溢出就是超過負數的最大范圍,具體的公式在書58頁,正負溢出的范圍和原因,直觀一點的圖在59頁。
- 但是其實公式里給的本質仍然是模運算,模掉w位的補碼最高有效位的權重2的w次冪。
- 非運算:
- 對于范圍在[-2^(w-1),2^(w-1))中的x,補碼的非運算有如下兩種情況:
- x=-2^(w-1)時,為-2^(w-1)
- x>-2^(w-1)時,為-x
- 乘法運算:同無符號乘法。若為截斷后的結果,則取結果的后w位作為計算結果。**無符號運算和補碼運算在“+”、“-”、“*”在位級上有相同的結果。**
- 乘以常數:對于某個常數K的表達式x*K生成代碼,編譯器會將K的二進制表示表達為一組0或1的交替的序列: [(0…0)(1…1)(0…0)…(1…1)],可以用以下兩種形式來計算這些乘積的結果:
- A:(x<<n)+(x<<n-1)+……+(x<<m)
- B:(x<<n+1)-(x<<m)
- 除以2的冪:設x/K,令K=2^n,
- 當x為正數時,計算 x>>n;
- 當x為負數時,將x加上偏置量,即加上2^n-1(即K-1),計算** (x+偏置量)>>n**。
浮點數
- 浮點表示對形如V=x X (2^y)的有理數進行編碼,適用于:
- 非常大的數字
- 非常接近于0的數字
- 作為實數運算的近似值
- IEEE浮點標準:IEEE標準754
- 二進制小數:
- 二進制點左邊第i位,權為2^i;右邊第i位,權為(1/2)^i。
- 增加二進制表示的長度可以提高表示的精度。
- IEEE浮點格式:
- 表示形式:V=(-1)^s * M * 2^E
- 符號:s決定這個數是正還是負。0的符號位特殊情況處理。
- 尾數:M是一個二進制小數,范圍為1~2-ε或者0~1-ε,ε=(1/2)^n。
- 階碼:E對浮點數加權,權重是2的E次冪(可能為負數)。
- 根據階碼的值,被編碼的值可分為三種:
- 情況一:規格化的值(當階碼字段不全為0或全為1時),階碼 E = e-Bias(e為無符號整數);
- 偏置值Bias = 2^(k-1)-1;尾數 M = 1+f(小數字段frac的解釋為描述小數值f,二進制小數點在小數字段最高有效位的左邊)。
- 情況二:非規格化的值 (當階碼字段全為0時),E = 1-Bias;Bias = 2^(k-1)-1;M = f。
- 情況三:特殊值 (當階碼字段全為1時),當小數域全為0時, 當s=1時,為-∞;當s=0時,為+∞;當小數域不全為0時,為NaN。
- 浮點數的舍入:IEEE浮點格式定義了四種不同的舍入方法:
- 向偶舍入(默認):將數字向上或向下舍入,是的結果的最低有效數字為偶數。能用于二進制小數。
- 向零舍入:把整數向下舍入,負數向上舍入。
- 向下舍入:正數和負數都向下舍入。
- 向上舍入:正數和負數都向上舍入。
- 浮點運算:
- 浮點加法:不滿足結合性、滿足單調性。
- 浮點乘法:不滿足結合性、滿足單調性,在加法上不滿足分配性。
教材學習中的問題和解決過程
教材P24中Perl腳本
- 書中給了一個Perl腳本,當初并不知道怎么運行,按照書上給的指令試了試發現行不通
- 最后轉念一想,既然是Perl腳本,那自然應該有Perl腳本的相關語句,不管怎樣,先在終端窗口中輸入perl看看ubuntu中是否自帶編譯工具,輸入完畢之后發現并沒有提示異常,說明系統中有這個指令,嘗試著在指令前加入perl,發現可行
另外,可以用man perl指令調用幫助文檔進行查看(我裝了中譯版,所以顯示中文)
本周代碼托管截圖
- 托管如下:
其他(感悟、思考等,可選)
- 這周主要學習了信息的表示和處理,其實有很多知識我們在之前的課程中都已接觸過:《計算機導論》、《HDL數字邏輯電路》、《C語言程序設計》、《Java程序設計》、《匯編語言程序設計》。只不過不是很系統,也不是很深刻,只知道是什么不知道為什么。通過這一章節的學習,從操作系統出發,了解了內存中的存儲讀取機制,以及各種標準對信息的表示與要求,更深層次的了解到了信息在計算機中的表示。
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 200/200 | 2/2 | 20/20 | 學習了Linux常用命令 |
| 第二周 | 79/279 | 1/3 | 30/50 | 了解vim,gcc,gdb基本操作 |
| 第三周 | 182/461 | 1/4 | 25/75 | 更深層次了解信息處理 |
參考資料
- 《深入理解計算機系統》
- Linux 基礎入門(新版)
- Linux系統編程
- 2016-2017-1 《信息安全系統設計基礎》教學進程
轉載于:https://www.cnblogs.com/20145221GQ/p/5928354.html
總結
以上是生活随笔為你收集整理的20145221 《信息安全系统设计基础》第3周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript封装与多态的体现
- 下一篇: 家庭理财如何选择投资基金 注意这几个方