20145240 《信息安全系统设计基础》第三周学习总结
20145240 《信息安全系統設計基礎》第三周學習總結
教材學習內容總結
p20
三種數字:
無符號數:基于傳統二進制表示法,表示大于或者等于零的數字。
補碼:表示有符號整數的最常見方式。
浮點數:表示實數的科學計數法的以二為基數的版本。
為什么會產生漏洞?
- 計算機運算的漏洞多由于計算機算數運算的微秒細節引發的。
p22
進制轉化:
- x=2^n轉化為十六進制
將x寫成x=2^n的形式,令n=i+4j,x的十六進制表示為:開頭為2^i的值,后面補j個0。
- 十進制轉化為十六進制
十進制數x反復除以16,得十六進制數
- 十六進制轉化為十進制
十六進制數x反復乘以16,得十進制數
p25
- gcc -m32 可以在64位機上(比如實驗樓的環境)生成32位的代碼
p26
字和字節順序:
- 字長:一個字長指明整數和指針數據的標稱大小。字長決定最重要的系統參數就是虛擬地址空間的最大大小。對一個字長為w位的機器而言,虛擬地址的范圍是0~2^w-1,程序最多訪問2^w個字節。
對于跨越多字節的程序對象需建立兩個規則:
小端法:高對高,低對低
大端法:從視覺上,是這次閱讀的順序,與小端法相反。 使字節順序變得可見的三種方式: 不同類型的機器之間通過網絡傳送二進制數據時,網絡應用程序的代碼編寫必須遵守已建立的關于字節順序的規則;使用反匯編器,處理整數數據的字節序列的存儲字節順序問題;當編寫規避正常的類型系統的程序時。
p28
p32
位向量的運算:按位運算
位向量的應用:表示有限集合
掩碼表示的是設置為有效信號的集合。位級運算
|:或 &:與 ~:取反 ^:異或邏輯運算
邏輯運算符:||(或)、&&(與)、!(非) 邏輯運算認為所有非零的參數都表示TRUE,參數0表示FALSE。返回1或者0,分別表示結果為TRUE或FALSE。
邏輯運算和位級運算的區別是:
按位運算只有在特殊情況下,即參數被限制為0或者1時,才能與其對應的邏輯運算有相同的行為; 若第一個參數求值就能確定表達式的結果,那么邏輯運算符就不會對第二個參數求值。移位運算
左移k位:丟棄最高位的k位,右端補k個0 右移包括:邏輯右移、算數右移 邏輯右移:左端補k個0(常用于無符號數) 算數右移:左端補k個最高有效位的值(用于有符號數)
p33
- 掩碼是位運算的重要應用,對特定位可以置一,可以清零。
p38
- 要用C99中的“long long”類型,編譯時要用gcc -std=c99
p39
補碼形式是最常見的有符號數的計算機表示方式:
將字的最高有效位解釋為負權 B2T(W)函數為:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和從i=0到i=w-2)
p44
有符號數和無符號數之間的轉換:
- 處理同樣字長的有符號數和無符號數之間相互轉換的一般規則:
數值可能會改變,但是位模式不變。
c語言允許無符號數和有符號數之間的轉換。轉換的原則是底層的位表示不變。
當從無符號數轉換為有符號數是,效果是應用函數U2T,從有符號數轉化為無符號數時,應用函數T2U,其中w表示數據類型的位數。
負數和正數相等的情況:u=2147483648 =-2147483648
(當輸出分別為無符號形式和有符號形式時)
p48
怎么樣讓負數等于正數?
- 在負數x后加上U,可以使其轉換為(2^w+x)
p49
擴展數的位表示:
零擴展:將無符號數轉換為更大的數在表示的開頭添加0
符號擴展:將一個補碼數字轉換為一個更大的數據類型
p52
深入思考一下代碼和結果:
length=0時會出現存儲器錯誤,這是因為參數length是無符號的,計算0-1將進行無符號運算,等價于模數加法,結果得到UMax。因為任何數都是小于等于UMax的,所以<=比較總是為真,代碼將訪問數組a的非法元素。
解決辦法:
1.將length聲明為int類型 2.將for循環測試條件改為i>lengthp67
整數運算
無符號加法
無符號運算可以被視為一種模運算形式,無符號加法等同于計算和摸上2^w,可以通過簡單的丟棄x+y的w+1位表示的最高位,來計算這個數值。 一個算數運算的溢出,是指完整的整數結果不能放到數據類型的字長限制中去。補碼加法
兩個數的w位補碼之和與無符號之和有完全相同的位級表示。大多數計算機用相同的機器指令來執行無符號或者有符號加法。補碼的非
對于范圍-2^(w-1)≤x<-2^(w-1)內的x,補碼的非運算如下:
x=-2^(w-1):補碼的非為-2^(w-1)x>-2^(w-1):補碼的非為-x求位級補碼非的方法:
對每一位求補,再對結果加1 建立在將位向量分為兩部分的基礎之上的無符號乘法
兩個數x、y相乘且x、y的位數為w,則結果的位數為2w。補碼乘法
同無符號乘法。 若為截斷后的結果,則取結果的后w位作為計算結果。注意:無符號運算和補碼運算在“+”、“-”、“*”在位級上有相同的結果。關于整數運算的最后思考
計算機執行的“整數”運算實際上是一種模運算形式;表示數字的有限字長限制來了可能的值的取值范圍,運算結果可能溢出;補碼表示提供了一種即能表示負數也能表示正數的靈活方法,同時使用了與執行無符號算術相同的位級實現; c語言中的unsigned數據類型的使用也應當特別注意,比如,在書寫整數常數和調用庫函數的時候。
p67
浮點數:
- 二進制小數
將十進制小數轉換為二進制小數 :
首先,將十進制小數寫成分數的形式,將分數的分子部分,寫成二進制的形式;將分數的分母部分寫成2^n的形式,將分子的二進制形式,從右往左數,數n位添加小數點。
小數點左移:除以2 小數點右移:乘以2- IEEE浮點數表示
表示形式為:V = (-1)^s * M * 2^E
符號:s決定這個數是負數(s = 1)還是正數(s = 0),而對于數值0的符號位解釋作為特殊情況處理。
尾數:M是一個二進制小數,它的范圍是1 ~ 2-ε,或者是0 ~ 1-ε。
階碼:E的作用是對浮點數據加權,這個權重是2的E次冪(可能是負數)。
根據階碼的值,可分為一下三種情況:
情況一:規格化的值 (當階碼字段不全為0或全為1時) E = e-Bias Bias = 2^(k-1)-1 M = 1+f 情況二:非規格化的值 (當階碼字段全為0時) E = 1-Bias Bias = 2^(k-1)-1 M = f情況三:特殊值 (當階碼字段全為1時) 當小數域全為0時, 當s=1時,為-∞;當s=0時,為+∞。 當小數域不全為0時,為NaN。- 浮點數的舍入
有四種情況分別是:
向偶數舍入(默認)向零舍入向下舍入向上舍入浮點運算
浮點加法:不滿足結合性、滿足單調性 浮點乘法:不滿足結合性、滿足單調性,在加法上不滿足分配性
教材學習中的問題和解決過程
課后練習題
練習題2.4
0x503c+0x8 = 0x5044 0x503c-0x40 = 0x4ffc 0x503c+64 = 0x50a1 0x50ea-0x503c=0xae練習題2.6
寫出0x00359141、0x4a564504的二進制表示:
0x00359141 = 0000 0000 0011 0101 1001 0001 0100 0001 0x4a564504 = 0100 1010 0101 0110 0100 0101 0000 0100- 練習題2.8
a = [01101001],b = [01010101]。計算:
~a = [10010110] ~b = [10101010] a&b = [01000001] a|b = [01111101] a^b = [00111100]本周代碼托管鏈接
http://git.oschina.net/20145240lsj/lsj20145240/tree/master/
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 200/200 | 1/1 | 20/20 | |
| 第二周 | 300/500 | 1/2 | 18/38 | |
| 第三周 | 200/7 00 | 1/3 | 22/60 |
參考資料
- 《深入理解計算機系統V2》學習指導
- ...
轉載于:https://www.cnblogs.com/20145240lsj/p/5928166.html
總結
以上是生活随笔為你收集整理的20145240 《信息安全系统设计基础》第三周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构-直接寻址表
- 下一篇: java信息管理系统总结_java实现科