位運算:
&: 邏輯and, &00…可以通通置零, &11.可以用來保留指定位
|: 邏輯或 ,由於其只能由0|1和1|0得1的性質, 所以要想在0和非零數之間找到非零數, 用|即可
^: 邏輯異或,.感覺有點像&的補集
~: 邏輯非, 對於所有位, 0取1, 1取0, ~x+1=-x(阿貝群)
非位運算:
!: 類似~, 但是它不是針對位運算, 0取1, 非0取0
&&: 類似&, 但只有都是true才得到1, 否則得到0
||: 類似|, 但只要有乙個或兩個true那就能得到true
1.無符號數的編碼和有符號數的編碼(補碼)的區別為最低位在無符號中依舊是2的冪, 而在有符號中則充當運算子的作用:(-1)^sign
2. 補碼表示的範圍不是對稱分布的, 為-2 ^(k-1)到2 ^(k-1)-1, 原因為-1表示為11…11, 而0表示為00…00
3. 無論有無符號, 加法和乘法都會產生溢位, 解決的方法為x1 + x2 mod 2 ^k和x1 * x2 mod2 ^k
4. 乘以常常數的話, 對於2的指數大小, 通過適當的左移即可達成, 而乘以一般的常數我們可以把其的位以連續的1和0來進行分割, 1加0減如下
110001101
,該數為397
,假如計算5
*397
則有:(
5<<8)
+(5<<7)
+(5<<3)
+(5<<2)
+(5<<0)
=5*397
=1985
這樣可以節省很多時鐘週期
5.除法的話, 主要看了除以2的冪, 進行算術右移就行
6:算術右移和邏輯右移, 算術右移為帶著符號位進行右移, 邏輯右移為單純在低位補零, 我的記憶方式為邏輯上右移要與左移一樣單純補零, 但是為了算數爭取則要進行符號位填充, 這樣就能很好的區分兩種右移了. 同時大多數語言中》為算數右移
7.小端法: 把高位元組放在低位址, 大端法:把高位元組放在高位址
1.表示式v = ( -1 ) ^ s m * 2 ^ e
2.以階碼分為三大類, 格式化(階碼非全零全一), 非格式化(階碼全為零), 特殊值(無窮:階碼全為一小數域全為零, nan:階碼全為一小數域非全為零)
3.格式化:f: 小數字, m=1+f, e=e - bias=e-2 ^ (k-1) + 1, v=(-1) ^ s * 2 ^ (e-2 ^ (k-1) + 1)(1 + f)
4.非格式化:f: 小數字, m=f, e:00…00, e=1 - bias=2-2^(k-1), v=(-1) ^s *2 ^ (2-2 ^ (k -1))*f
5.浮點數轉變為整數(僅代表個人總結): 現在最高位的1右側放置小數點, 再數小數點後有多少位(fn), 之後用n減去該數得在最低位置多少個0, 再用fn加上bias, 置於最高位即可
一些碎碎念:
本來1月28日立的部落格, 其實2月2號就看完了, 硬是拖到7號才開始寫, 中間一度產生了二進位制無法表示所有整數的想法, 懶狗去死罷(劃掉)
異常 深入了解計算機系統
異常是異常控制流的一種形式,它一部分由硬體實現,一部分由作業系統實現。因為它們有一部分是由硬體實現的,所以具體細節將隨系統的不同而有所不同。然而,對於每個系統而言,基本的思想都是相同的。在這一節中我們的目的是讓你對異常和異常處理有乙個一般性的了解,並且向你揭示現代計算機系統的一乙個經常令人感到迷惑的...
《深入了解計算機系統》,家庭作業2 73 2 74
2.74 寫出具有以下原型的函式 addition that saturates totmin or tmax int saturating add int x,int y 同正常的補碼加法的溢位的方式不同,當正溢位時,飽和加法返回tmax,負溢位時,返回tmin,飽和運算常常用在執行數字訊號處理的...
深入理解計算機系統第四版 深入理解計算機系統
記憶體從概念上來說就是乙個很大的位元組陣列,儲存著程式和資料。程式用虛擬位址來引用記憶體位置。硬體和作業系統軟體聯合起來將虛擬位址翻譯成實際或實體地址,指明資料實際存在記憶體中哪個地方。指令集的乙個重要性質就是位元組編碼必須有唯一的解釋。任意乙個位元組序列要麼是乙個唯一的指令序列的編碼,要麼就不是乙...