2007年2月4日 星期日

Hackers Delight 2-1 (2/5)

使用下面式子可指示出數字內最右為1的位元以及其右的連續0-位元, 如果根本沒有為1的位元存在, 本式輸出零 (例如 01011000 => 00001111)



使用下面式子可延伸數字內最右為1的位元, 如果根本沒有為1的位元存在, 本式輸出全1 (例如 01011000 => 01011111)



使用下面式子可關閉最右的連續1-位元序列 (例如: 01011000 => 01000000)


這式子亦可用來判斷一個非負整數是否為 2^j - 2^k, j>=k>=0 型. 將數字帶入本式之後檢查是否為0即可.

以上所有式子都有對應的共軛型. 把每個式子的用途描述裡的1和0交換, 然後把式子裡的x-1用x+1取代, x+1用x-1取代, -x用NOT(x+1)取代, AND用OR取代, OR用AND取代, 但維持x跟NOT(x)不變. 轉換後的式子將達成轉換後的用途. 以本節第一個式子為例

用下面式子可以關閉word裡最右為0的位元, 如果根本沒有該位元, 本式將輸出全1 (例如: 10100111 => 10101111)


譯注: 令 f(x) 為原式, f'(x) 為共軛式, 則 f'(x) = NOT(f(NOT(x)) 據此可推得上述的取代規則

沒有留言: