標籤:
第二章2.1資訊儲存1、數位三種表示
無符號數:傳統的二進位標記法,表示大於或等於零的數字 補碼:表示有符號數,可為正可為負的數字 浮點數:實數的科學計數法的以二為基數的版本 整數運算和浮點數運算會有不同的數學屬性。 原因:處理數字表示有限性的方式不同 整數表示:編碼的數值範圍相對較小,但精確 浮點數表示:編碼的數值範圍相對較大,但是近似的 電腦運算的漏洞多由於電腦算數運算的微秒細節引發的
2、進位轉化(1)x=2^n轉化為十六進位
將x寫成x=2^n的形式,令n=i+4j,x的十六進位表示為:開頭為2^i的值,後面補j個0。
(2)十進位轉化為十六進位
十進位數x反覆除以16,得十六進位數
(3)十六進位轉化為十進位
十六進位數x反覆乘以16,得十進位數
3、字和位元組順序
字長:一個字長指明整數和指標資料的標稱大小。字長決定最重要的系統參數就是虛擬位址空間的最大大小。對一個字長為w位的機器而言,虛擬位址的範圍是0~2^w-1,程式最多訪問2^w個位元組。 對於跨越多位元組的程式對象需建立兩個規則: 這個對象的地址是什麼,以及在儲存空間中如何排列這些位元組。 小端法:高對高,低對低 大端法:從視覺上,是這次閱讀的順序,與小端法相反。 使位元組順序變得可見的三種方式: 不同類型的機器之間通過網路傳送位元據時,網路應用程式的代碼編寫必須遵守已建立的關於位元組順序的規則;使用反組譯碼器,處理整數資料的位元組序列的儲存位元組順序問題;當編寫規避正常的類型系統的程式時。
4、布爾代數(1)位向量的運算:按位元運算(2)位向量的應用:表示有限集合
掩碼錶示的是設定為有效訊號的集合。
(3)位級運算
|:或 &:與 ~:取反 ^:異或 確定一個位級運算式的結果的最好的方法就是:將十六進位的參數擴充成二進位表示並執行二進位運算,然後在轉換為十六進位。 w 位級運算的常用演算法:掩碼運算。 掩碼運算:掩碼是一個位元模式,表示從一個字中選出的位的集合。例如:位級運算x&0xFF產生一個有x的最低有效位元組組成的值。運算式~0將產生一個全1的掩碼,不管機器的字大小是多少。
(4)邏輯運算
邏輯運算子:||(或)、&&(與)、!(非) 邏輯運算認為所有非零的參數都表示TRUE,參數0表示FALSE。返回1或者0,分別表示結果為TRUE或FALSE。 邏輯運算和位級運算的區別是: 按位元運算只有在特殊情況下,即參數被限制為0或者1時,才能與其對應的邏輯運算有相同的行為; 若第一個參數求值就能確定運算式的結果,那麼邏輯運算子就不會對第二個參數求值。
(5)移位元運算
左移k位:丟棄最高位的k位,右端補k個0 右移包括:邏輯右移、算數右移 邏輯右移:左端補k個0(常用於無符號數) 算數右移:左端補k個最高有效位的值(用於有符號數)
2.2整數表示1、補碼編碼
補碼形式是最常見的有符號數的電腦表示方式 將字的最高有效位解釋為負權 B2T(W)函數為:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和從i=0到i=w-2)
2、有符號數和無符號數之間的轉換
處理同樣字長的有符號數和無符號數之間相互轉換的一般規則:數值可能會改變,但是位元模式不變。 c語言允許無符號數和有符號數之間的轉換。轉換的原則是底層的位表示不變。 當從無符號數轉換為有符號數是,效果是應用函數U2T,從有符號數轉化為無符號數時,應用函數T2U,其中w表示資料類型的位元。 負數和正數相等的情況:u=2147483648 =-2147483648 (當輸出分別為無符號形式和有符號形式時)
3、擴充數的位表示
零擴充:將無符號數轉換為更大的數在表示的開頭添加0 符號擴充:將一個補碼數字轉換為一個更大的資料類型
4、截斷數字
截斷數字:不用額外的位來擴充一個數值,而是減少表示一個數位位元。
5、使用無符號數的情況
(1)把字僅僅看做是位的集合,並沒有任何數字意義時 (2)當實現模運算和多精度運算的數學包時,數字是由數的數組來表示的,無符號值也會非常有用。
2.3整數運算1.無符號加法
無符號運算可以被視為一種模運算形式,無符號加法等同於計算和摸上2^w,可以通過簡單的丟棄x+y的w+1位表示的最高位,來計算這個數值。 一個算數運算的溢出,是指完整的整數結果不能放到資料類型的字長限制中去。
2.補碼加法
兩個數的w位補碼之和與無符號之和有完全相同的位級表示。大多數電腦用相同的機器指令來執行無符號或者有符號加法。 有符號加法的結果z=x+y可分為4種情況: (1)-2^(w)≤z<-2^(w-1):兩個負數相加得一個非負的結果。 (2)-2^(w-1)≤z<0:結果正常,z為負數 (3)0≤z<2^(w-1):結果正常,z為正數 (4)2^(w-1)≤z<2^(w):兩個正數相加得一個負數的結果。
3.補碼的非
對於範圍-2^(w-1)≤x<-2^(w-1)內的x,補碼的非運算如下: (1)x=-2^(w-1):補碼的非為-2^(w-1); (2)x>-2^(w-1):補碼的非為-x。 求位級補碼非的方法: (1)對每一位求補,再對結果加1;(2)建立在將位向量分為兩部分的基礎之上的。
4.無符號乘法
兩個數x、y相乘且x、y的位元為w,則結果的位元為2w。
5.補碼乘法
同無符號乘法。 若為截斷後的結果,則取結果的後w位作為計算結果。 注意:無符號運算和補碼運算在“+”、“-”、“*”在位級上有相同的結果。
6.乘以常數
對於某個常數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)
7.除以2的冪
設x/K,令K=2^n, 當x為正數時,計算 x>>n; 當x為負數時,將x加上偏置量,即加上2^n-1(即K-1),計算** (x+偏置量)>>n**。
8.關於整數運算的最後思考
電腦執行的“整數”運算實際上是一種模運算形式; 表示數位有限字長限制來了可能的值的取值範圍,運算結果可能溢出; 補碼錶示提供了一種即能表示負數也能表示正數的靈活方法,同時使用了與執行無符號算術相同的位級實現; c語言中的unsigned資料類型的使用也應當特別注意,比如,在書寫整數常數和調用庫函數的時候。
2.4浮點數(1)二進位小數
將十進位小數轉換為二進位小數 首先,將十進位小數寫成分數的形式,將分數的分子部分,寫成二進位的形式;將分數的分母部分寫成2^n的形式,將分子的二進位形式,從右往左數,數n位添加小數點。 小數點左移:除以2 小數點右移:乘以2
(2)IEEE浮點數表示
表示形式為:V = (-1)^s * M * 2^E 符號:s決定這個數是負數(s = 1)還是正數(s = 0),而對於數值0的符號位解釋作為特殊情況處理。 尾數:M是一個二進位小數,它的範圍是1 ~ 2-ε,或者是0 ~ 1-ε。 階碼:E的作用是對浮點數據加權,這個權重是2的E次冪(可能是負數)。 根據階碼的值,可分為一下三種情況: 情況一:規格化的值 (當階碼欄位不全為0或
(3)浮點數的舍入
有四種情況分別是:向偶數舍入(預設)、向零舍入、向下舍入、向上舍入。
(4)浮點運算
浮點加法:不滿足結合性、滿足單調性 浮點乘法:不滿足結合性、滿足單調性,在加法上不滿足分配性
全為1時) E = e-Bias Bias = 2^(k-1)-1 M = 1+f
資訊安全系統設計基礎第三周學習總結