ビットコンピューティングのヒント

  1. そして、計算(&)

    • パリティが決定される:X&1 = 0は偶数であります

    • X&(X - 1)右端1~0

      数を検出するために用いることができる数が2のべき乗であれば、それは唯一の2進数の1だ、除去した後、1を返す必要があり、2の累乗ではありません

    • X&(X +1)連続1の右側に0となります

  2. OR(|)

    • X | 1は、1への最後のいずれかになります
    • X |(X + 1)右端の0 1となり
    • X |(X - 1)連続0〜1の右側に
  3. 排他的論理和演算(^)

    • 最後の否定のx ^ 1

    • X ^ x = 0の

      一つだけの配列番号は、一度表示され、残りは2回表示、すべての数値は、排他的であるかだけ数一度に得ることができます

    • データ交換

      int swap (int a, int b) {
          a ^= b;
          b ^= a;
          a ^= b;
      }
  4. シフト操作

    • 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です。

おすすめ

転載: www.cnblogs.com/gcheeze/p/11209639.html