在計算機中,位與的符號是&,運算過程是false&false=false, true&false=false, true&true=true
故任何乙個數&1的結果有:
0&1=0
1&1=1
2&1=0
3&1=1……
…1234&1=0
4321&1=1
可以看出乙個奇數(十進位制)
位與1
的結果是1
,乙個偶數(十進位制)
位與1
的結果是0
我們分析一下幾個例子,3和987都是十進位制數:
3&1
在計算過程是:
1101—01
所以: 3&1=01=1
987&1
在計算過程是:
1111011011
0000000001
----------------
0000000001
所以: 987&1=0000000001=1
任何乙個數
位與1,則1會在前面補上相應個0,然後和那個數
進行位與計算
,所以結果不是0就是1,因此,我們常常用乙個數
&1
來判斷乙個數
是奇數或偶數。
1,比如在資料庫中,我們獲取所有奇數的id,就可以直接:
select id from mytable where id&
1;
2,在程式設計中判斷乙個數是否為奇數:
int number =
789;
if(number &1)
else
位運算是最靠近計算機底層的,所以計算效率特別高,尤其在資料量超大的情況下,優勢很明顯。
與或運算常常用於判斷奇偶
移位運算常常用於倍數運算
求乙個數中1的個數
碰到遇到乙個有趣的題,求乙個數二進位制的表示中1的個數,該題有兩種解法,一種是使用短除法將該數直接轉化為二進位制數,另一種比較巧妙的演算法是使用與運算,原理如下圖所示 依照此種思入有如下演算法 int numberof1 solution3 int i return count 依照短處法的思路 有...
1086 逆轉乙個數中的位
逆轉乙個數中的位 time limit 1000ms memory limit 65536k total submit 205 accepted 58 description pzzer從不放棄任何一絲希望,只要有希望都想來個大逆襲,不過這次是想把乙個無符號數x的位逆轉過來,如10進製19 1001...
計算乙個數中1的個數 0的個數
1.求乙個int數二進位制中1的個數 1 與1 右移 正數 負數都可以 計算的是負數補碼中1的個數 inta cin a int count 0 int n sizeof int 8 位數for int i 0 i a 1 右移一位 cout 2 右移相當於除以2 判斷最低位可用2取餘 右移可用除以...