計算機中的數字有三種表示:無符號數、補碼(帶符號數)、浮點數
資訊的儲存與定址:計算機中將位元組作為最小可定址單元。而位元組的排列順序分大端法和小端法兩種。大端法就是指將最高位放在最前面的儲存方式,而小端法則是將最低位放在最前面的儲存方式。
c語言中的移位運算:
帶符號數與無符號數的轉換:
帶符號數->無符號數:若x<0,則返回x+2w
若x>=0,則返回x
無符號數->帶符號數:若x<=tmax,則返回x
若x>tmax,則返回x-2w
整數的擴充套件:將乙個較小型別的數,轉換為較大型別
無符號數,在數字的二進位制表示的開頭添0,這被稱為零擴充套件
帶符號數,在數字的二進位制表示的開頭新增最高有效位的值符號擴
整數的截斷:將乙個較大型別的數,轉換為較小型別
無符號數,先將數字的二進位制表示直接轉換成對應的無符號數,然後再用這個無符號數進行模2的k次方運算
帶符號數,先將數字的二進位制表示直接轉換成對應的無符號數,然後再用這個無符號數進行模2的k次方運算,然後經過模運算後得到的無符號轉轉換成帶符號數。
無符號數加法:若x+y≥2w(溢位),則為x+y-2w;否則為x+y
溢位判斷:令s=x+y,當且僅當s無符號數的非:若x=0,則為x,否則為2w-x
帶符號數加法:若x+y≥2w-1,則為x+y-2w(正溢位);若x+y<-2w-1,則為x+y+2w(負溢位);否則為x+y
溢位判斷:令s=x+y,當且僅當x>0,y>0,但s<=0時,發生了正溢位;當且僅當x<0,y<0,但s>=0時,發生了負溢位
帶符號數的非:若x=tmin,則為x,否則為-x
無符號數的乘法:(x*y) mod 2w
帶符號數的乘法:u2t((x*y) mod 2w)
乘以2的冪:對於無符號數,c表示式x
對於帶符號數,c表示式x
除以2的冪:無符號數處以2的冪,c表示式x>>k產生數值 floor( x/2k )
帶符號數除以2的冪,向下捨入,c表示式x>>k產生數值 floor( x/2k )
帶符號數除以2的冪,向上捨入,c表示式 ( x+(1<>k 產生數值 ceil( x/2k )
浮點數:ieee浮點標準用v=(-1)s * m * 2e的形式來表示乙個浮點數
浮點數的特殊值總結:
以乙個8位的浮點數為例:
浮點數的捨入:
向偶數捨入(即四捨五入)
向零捨入
向下捨入(相當於ceil函式)
向上捨入(相當於floor函式)
c語言中的浮點數:
從int轉換成float,數字不會溢位,但是可能被捨入。
從int或float轉換成double,因為double有更大的位數,所以能夠保留精確的數值。
從double轉換成float,因為範圍較小,所以值可能溢位成+∞或-∞。並且,由於精度較小,它還可能被捨入。
從float或者都變了轉換成int,值將會向零捨入。
浮點數計算機內表示及計算
浮點數即帶有小數的數,是不精確的。在計算機內表示 f 1 s m 2 e s 符號數 e 指數 m 尾數 表示公式 偏移量18 23 1 s 2 p 127 1.m 1271 1152 1 s 2 p 1023 1.m 1023 例如 浮點數4.5計算機內表示為 100.1 1 0 1.001 2 ...
計算機內部數字的儲存 擴充套件
在對精度要求很高的系統中,或要對小數的運算結果進行比較時,需要特別謹慎 js中的小數運算是精確的嗎?不一定js中的整數運算是精確的嗎?不一定js中表示的整數是連續的嗎?不是,當 js 的數字很大的時候,不再連續 js中表示的最大數字是多少?最大連續整數 從1開始數到這個數字一直都是連續的,並且到下乙...
計算機記憶體
1.1 計算機硬體記憶體架構。計算機cpu central processing unit 和記憶體的互動是最頻繁的,記憶體是我們的快取記憶體區。使用者磁碟和cpu的互動,而cpu運轉速度越來越快,磁碟遠遠跟不上cpu的讀寫速度,才設計了記憶體,使用者快取使用者io等待導致cpu的等待成本。但是隨著...