读书笔记——信息的表示与处理
位向量
應用位向量的表示有限集合
利用位向量編碼任何屬于{0, 1, 2,…, w-1}的子集,例如:
位向量a = [101001]表示集合A = {0, 3, 5} (a中的位從右往左數,值為1的下標記錄到集合中)
位運算
與運算判斷奇偶
x = 2 print(x & 1 == 0) (True為偶數,只需要看二進制最低有效位即可) y = 1 print(y & 1 == 1) (True為奇數)異或運算實現無需借助額外空間達成兩元素值的交換(不過并無實際用處(性能上沒有優勢))
示例:
邏輯運算第一個能確定結果就不會執行第二個
舉例略
有符號數
現代機器上有符號數一般用補碼表示
補碼(Two’s complement)
w位的補碼定義:補碼的值Xt=?xw?12w?1+剩余低位求和補碼的值X_t = -x_{w-1}2^{w-1} + 剩余低位求和補碼的值Xt?=?xw?1?2w?1+剩余低位求和
x_w-1是最高有效位,只有最有效高位是1時?xw?12w?1-x_{w-1}2^{w-1}?xw?1?2w?1才有效,例如1100 = -23*1 + 22 + 0 + 0 = -4
補碼為何稱之為2的補?
補碼可以說是相對于負數而言,因為我們都知道正數的原碼和補碼是相同的
以4位機器的-8為例,-8 = 0 - 8,計算0 - 8:
換成加法1000+1000=10000=241000+1000 = 1\ 0000 = 2^41000+1000=1?0000=24,其他所有負數的補碼都可以這樣求,因此2的補,實際上指的是2w2^w2w的補,w是位的寬度
無符號數表示范圍的Max為什么等于有符號數表示范圍的Max的兩倍+1
2 ^ 8是2 ^ 7的兩倍,-2 ^ 8表示的范圍是2 ^ 7表示范圍的兩倍,但是正數還要一個用來表示0
反碼(Ones’ complement)
反碼的值表示類似補碼,
最高有效位的權比補碼最高有效位的權少1,即反碼的最高有效位的權是?(2w?1?1)而不是?2w?1反碼的最高有效位的權是-(2^{w-1} - 1)而不是-2^{w-1}反碼的最高有效位的權是?(2w?1?1)而不是?2w?1+0是0000,-0是1111
(-0:1111=-(23 -1)+(22+2+1)=-7+7=0)
為什么反碼稱為【(許多個)1的補】?
一個數只要加上這個數的反碼就可以得到【二進制的全1(多個1)】
-7的補碼是多少(w=4)?
7的原碼(二進制)是0111,-7的原碼是首位改成1,即1111,將1111轉為補碼:1001
或者這種簡單的直接算出-8+1 = -7,所以補碼是1001
為什么y=-8, -y還是-8(w=4)?
答:負號“-”的作用是將最高位改成1,y=-8 = 1000,那么-y還是1000=-8,-8再加上負號并不能變成+8
總結
以上是生活随笔為你收集整理的读书笔记——信息的表示与处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [AssertionError: npu
- 下一篇: java jstack 工具_java命