2012-08-24 17 views
0

後,我對我執行特定操作 我想,以確保數量仍然在手術後整除的數。需要知道,如果一個數整除的操作

比方說,我有一個整數x它通過PAGE_S

整除這是否會產生一個整數,這也是整除PAGE_S?

x^ ~(PAGE_S-1); 

so (x % PAGE_S) == ((x^ ~(PAGE_S-1)) % PAGE_S)? 雖然我測試到目前爲止,它的工作原理,但我需要理解爲什麼...

PS這是翻譯的虛擬內存地址到物理地址

回答

2

是的代碼的一部分,但前提是PAGE_S是兩個冪。

如果PAGE_S是2的冪(比如說2 k),那麼它的二進制表示是1,後跟k 0s。所以,PAGE_S-1將是二進制的k 1s,因此~(PAGE_S-1)全部是1,後跟k 0s。

XOR運算(^)​​將翻轉所述第一操作數,其在所述第二操作數的相應位爲1的任何比特;例如,101101^111000是010101,因爲前三位被翻轉。

由於x可以被PAGE_S整除,最後k位必須爲零。由於~(PAGE_S-1)的最後k位也爲零,所以x^~(PAGE_S-1)的最後k位爲零,因此它可以被PAGE_S整除。這也反轉了x的所有其他位。

相關問題