位操作筆記 判斷兩個整數的符號位是否相反

2021-10-17 21:09:09 字數 781 閱讀 4388

判斷兩個整數的符號位是否相反,也就是兩個數是否乙個是正數,乙個是負數。

該演算法通過異或的結果大小來判斷兩個整數的符號位是否相反。

bool detect_opposite_signs

(int x,

int y)

第一步,x ^ y,兩個整數先進行異或。

第二步,判斷異或的結果是否小於0,如果兩個整數的符號位相反,那麼異或的結果就會讓最高位的符號位為1,也就是異或得到的數會小於0,反之大於等於0則表示兩個正數符號位相同。

計算示例

假設x = 10 , y = 5

x ^ y = 10 ^ 5 = 0xa ^ 0x5 = 0
結果等於0,表示符號位相同。

假設x = 10 , y = -5

x ^ y = 10 ^ -5 = 0xa ^ 0xfffffffb = 0xfffffff1 < 0

0000 0000 0000 0000 0000 0000 0000 1010

^ 1111 1111 1111 1111 1111 1111 1111 1011

-------------------------------------------

1111 1111 1111 1111 1111 1111 1111 0001

結果小於0,表示符號位相反。

bit twiddling hacks by sean eron anderson

C語言位操作 判斷整數的符號

關於衡量計算操作的方法 當為演算法統計操作的數量的時候,所有的c運算子被認為是一樣的操作。中間過程不被寫入隨機儲存器 ram 而不被計算,當然,這種運算元的計算方法,只是作為那些接近機器指令和cpu執行時間的服務。所有的操作被假設成花相同的執行時間,事實上是不正確的。有很多不同的因素決定乙個系統能多...

位運算實現兩個整數的加法運算

最近在看一本 程式設計師面試寶典 在程式設計基本概念這一章中多次出現了按位與,異或等二進位制的計算,下面這道題就是其中之一 先放 include int add const int a,const int b if b 0 return a 設定遞迴退出條件 else int sum,carry s...

AcWing 兩個簡單的位運算操作

是柱狀陣列的乙個基操作 返回n的最後一位1 lowbit n n n 比如 x 1010 那麼返回10 x 101000 返回1000 includeusing namespace std int lowbit int x int main n的二進位制表示中第k位是幾 k的下標 個位是第0位,十位...