そして、計算(&)
パリティが決定される:X&1 = 0は偶数であります
X&(X - 1)右端1~0
数を検出するために用いることができる数が2のべき乗であれば、それは唯一の2進数の1だ、除去した後、1を返す必要があり、2の累乗ではありません
X&(X +1)連続1の右側に0となります
OR(|)
- X | 1は、1への最後のいずれかになります
- X |(X + 1)右端の0 1となり
- X |(X - 1)連続0〜1の右側に
排他的論理和演算(^)
最後の否定のx ^ 1
X ^ x = 0の
一つだけの配列番号は、一度表示され、残りは2回表示、すべての数値は、排他的であるかだけ数一度に得ることができます
データ交換
int swap (int a, int b) { a ^= b; b ^= a; a ^= b; }
シフト操作
X >> 1最後のビットを削除します
X << 1 0は、最後に追加しました
X << 1 | 1 1は、最後に追加しました
Yの位置xを取ります
int get(int x, int y) { return (x >> (y - 1)) & 1; }
書き込み機能、および2つの整数の和は、四則演算の使用はシンボルvivoで機能することができない必要
int Add(int num1, int num2)
{
while (num2) {
int temp = num1 ^ num2;
num2 = (num1 & num2) << 1;
num1 = temp;
}
return num1;
}
内進数1の出力の数を示す整数。前記負の数は、表現を補完
int NumberOf1(int n) {
int count = 0;
while (n != 0) {
++count;
n = (n - 1) & n;
}
return count;
}
絶対値
int abs(int n) //针对32位的int
{
return (n ^ (n >> 31)) - (n >> 31);
}
- nは正の数、N >> 0に等しい31ビット全て、0に等しい値である場合。N ^ 0に式 - 0、N-等しいです。
- nが負の場合、Nは>>値が-1に等しいすべての31ビットは1に等しいです。(N ^ -1)+ 1に表現は、それが十分に理解され、そのようなことを行い、その逆相補プラス1の負の逆数、(N ^ -1)+ 1です。