判斷兩個整數的符號位是否相反,也就是兩個數是否乙個是正數,乙個是負數。
該演算法通過異或的結果大小來判斷兩個整數的符號位是否相反。
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位,十位...