算法(位運算)

負數的位運算:

負數進行位運算時是以補碼形式進行的,如果運算結果首位爲1,結果也需要求一次補碼,才能得到最終的結果。

例子如下:

1.-10的補碼:

#原碼,負數首位爲1
1000 0000 0000 0000 0000 0000 0000 1010

最右邊的1和1後面的不變,首位不變,其餘位取反:

#補碼
1111 1111 1111 1111 1111 1111 1111 0110

2.-9的補碼:

#原碼,負數首位爲1
1000 0000 0000 0000 0000 0000 0000 1001

最右邊的1和1後面的不變,首位不變,其餘位取反:

#補碼
1111 1111 1111 1111 1111 1111 1111 0111

1.以 10 ^ -10 爲例:

  0000 0000 0000 0000 0000 0000 0000 1010
^ 1111 1111 1111 1111 1111 1111 1111 0110
= 1111 1111 1111 1111 1111 1111 1111 1100

得到的結果首位爲1,所以再求一次補碼:

1000 0000 0000 0000 0000 0000 0000 0100

即 -4

1.以 -9 & -10 爲例:

  1111 1111 1111 1111 1111 1111 1111 0111
& 1111 1111 1111 1111 1111 1111 1111 0110
= 1111 1111 1111 1111 1111 1111 1111 0110

得到的結果首位爲1,所以再求一次補碼:

1000 0000 0000 0000 0000 0000 0000 1010

即 -10

常用的一些規則:

1.任何數和0做異或(^)都是其自身。
-2^0 = -2    -1 ^ 0 = -1   0 ^ 0 = 0   1 ^ 0 = 1   2 ^ 0 = 2    123 ^ 0 = 123
2.n & (n-1) 可以消除n的二進制表示的最右邊的一個1,常用於判斷n的二進制表示中有多少個1或判斷是不是2的次冪。
3.n & ~(n-1) 可以只保留n的二進制表示的最右邊的一個1。

參考

位運算有什麼奇技淫巧?
位運算簡介及實用技巧(一):基礎篇
位運算簡介及實用技巧(二):進階篇(1)
位運算簡介及實用技巧(三):進階篇(2)
位運算簡介及實用技巧(四):實戰篇

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章