標籤:
資訊安全系統設計基礎第三周學習總結
【學習時間:6 hours】
【學習任務:仔細研讀《深入理解電腦系統》第二章內容,掌握整數表示、浮點數表示及其運算】
一、學習過程1.三種數字:無符號數、有符號數(2進位補碼)、浮點數,資訊安全系同學從逆向角度考慮為什麼會產生漏洞?
整數運算和浮點數運算會有不同的數學屬性是因為他們處理數字表現有限性的方式不同。整數的表示雖然只能編碼一個較小的範圍,但這種表示是精確的;而浮點數表示的範圍相對較大,但是這種表示只是近似的。
2.位元組順序是網路編程的基礎,兩種表示順序是:小端——“高對高、低對低”,大端與之相反。3.P28代碼如下:
#include <stdio.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, int len){ int 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);}void main(){ int val; printf("please input the num :"); scanf("%d", &val); test_show_bytes(val);}
windows下執行結果如下:
4.命令man ascii可以獲得一個ASCII字元碼錶。5.使用與非,可以完成交換。6.技巧:如果要使用C99中的“long long”類型,編譯時間可以通過 gcc -std=c99完成。7.有符號數轉換成無符號數:B2U(x)=x(w-1)*2^w+x8.讓負數等於正數,使用類型轉換,當int型轉換為unsigned型時,負數就可以被轉換為其二進位表示的無符號數。9.零擴充:簡單地在表示的開頭加上0;符號擴充:將一個補碼數字轉為更大的資料類型,在表示中添加最高有效位的值的副本。10.P52代碼執行,結果如下:
正常:
運行錯誤:
在lenght=0時,本應該是返回0.0的函數出現了儲存空間錯誤。系統提示檢測到錯誤。發現定義的length是unsigned,按照無符號運算的話,結果會是Umax。不等式恒成立。迴圈就會自動訪問a的所有元素直到訪問到非法元素。
修改:將length的定義成int即可。
11.如何讓整數運算溢出?如何避免?
因為機器有的限制,只要兩個運算數進行運算的結果超過Umax或者Umin,就會發生溢出。避免溢出,將運算結果控制在-2^(w-1)---2^(w-1)-1中間;或者增加if語句判斷運算數的是否合法。
12.C語言中,有符號數位乘法是通過將2w位截斷為w位的方式來實現的。即:xy - U2T((xy)mod 2 ^w)13.運算式x*K,其中,K可以表示為一組從位位置n到m連續的1和其他位置的0,那麼,運算式可以表示為:
A:(x<<n)+(x<<n-1)+……+(x<<m)
B:(x<<n+1)-(x<<m)
14.浮點數的舍入,轉換成分數較易二、作業總結1.關於使用與非交換,數組中含有奇數個元素的時候,判斷條件中不能有等號,否則會出現中間的數字交換結束後變為0。2.Java只支援有符號數;Java中,>>是算術右移,>>>是邏輯右移。3.關於十六進位轉化為十進位
例:fffffe58,計算方法 -16^3+1416^2+516+8
4.T2Uw(x)的值y
y+x=2^w
若x=0,則y=0
5.關於練習題2.24
截斷,無符號數,截斷值直接為模2^3的餘數,有符號數餘數的值帶入 U2Tw(x)中的結果為最後的結果。
U2Tw(x)=y的計算方法:
x<2^(w-1)
y=x
x>=2^(w-1)
y=x-2^w
6.無符號常量,會有尾碼字元U或u7.關於習題2.23
移動24位之後只看最後兩位,fun1前面均補0;fun2前兩個倒數第二位均小於8,所以前面都補0,後兩個數對應位置均大於等於8,所以前面補1。
造成差異的原因:int的位置不同
8.關於2.39,n+1是字長,如果最高有效位只到n的話,則第一項移動字長的位元的結果將變為0。9.除以2的冪可以通過邏輯(算術)右移實現。10.關於2.44中舉反例時,考慮極端位置,易得到結果。11.關於2.54中總結:
精度和範圍:double>int>float
距參數越近,需要的精度和範圍越高。
三、總結
本次學習,一開始看知識點時並不是很清楚,後來經過練習,翻閱答案,從答案中找出規律,從而對公式及解題方法有了更深的瞭解。
第三周學習總結