contribute by <hsiehong
>
進階電腦系統理論與實作
outline
OP = ^
要計算兩數 x
, y
的 Hamming distance,先將兩數做 xor 運算,所得結果的數的二進制中 1 的個數即為所求
參考解說
主要是利用 bit operation 每個 bit 都是各自獨立的特性,記錄每個位置 1 跟 0 出現的次數,每個 1 跟每個 0 會貢獻一次 Hamming distance,將兩數相乘就是那個 bit 總共會貢獻的 Hamming distance
AAA = int **parent
, BBB = (-1)
, CCC = 1 << i
在 func treeAncestorCreate()
內部,可以看到 line 11 先宣告一個一維空間給 parent ,在 line 15 在對每個單位空間宣告 max_level 大小的空間,可得知 parent
是一個二維陣列,所以 AAA = int **parent
line 24 的 for loop 是在對每個點建立祖先,假設要建立第 j 個祖先,要先檢查第 j-1 的祖先是否存在,有的話才將第 個 parent 的第 parent 加入 (binary tree) 寫入第 個祖先,所以 BBB = -1
FizzBuzz !!!
從 1 數到 n,如果是 3的倍數,印出 “Fizz”,如果是 5 的倍數,印出 “Buzz”,如果是 15 的倍數,印出 “FizzBuzz”,如果都不是,就印出數字本身,觀察下列 offset,可以透過 offset 來控制期望的輸出
KK1 = div5
, KK2 = div3
, KK3 = 2
div3
, div5
分別代表 n 是否可以被 3, 5 整除,並決定好要複製的起點和長度。觀察 length
觀察每個狀態的起始位置
div3 | div5 | start(MSG_LEN) |
---|---|---|
1 | 0 | 0 |
0 | 1 | 4 |
1 | 1 | 0 |
0 | 0 | 8 |
可以推得 (MSG_LEN >> KK1) >> (KK2 << KK3)
,其中 KK1 = div5
, KK2 = div3
, KK3 = 2
TODO