序文
Leetcodeをブラッシングする際の効率を向上させるために、ビット演算を使用して多くの演算を最適化できます。この記事は、ビット演算の関連する演算を収集および要約するために使用されます。ビット演算の基本的な知識を見ることができます:ポータル。
コンテンツ
4つの算術を実現する
これはあまりにもハードコア、およびラインの表情で、それはあまりにも!!(Oファイト誇張されますようにコードを書いている場合- )〜「」☆☆ミミ
プラスワンオペレーション
従来のコード:
int a = 1;
a += 1;
ビット演算コード:
int a = 1;
a = -~a;
マイナス1回の操作
int a = 1;
a -= 1;
ビット演算コード:
int a = 1;
a = ~-a;
2を掛ける演算
この演算は、2の累乗を掛ける限り実行でき、2の累乗を掛けるだけ左にシフトします。
従来のコード:
b = a * 2;
ビット演算コード:
b = a << 1;
2を掛けて、1つの演算を追加します
従来のコード:
b = a * 2 + 1;
ビット演算コード:
b = a << 1 | 1;
2演算で除算
この操作は、2の累乗で除算すれば実行でき、2の累乗で除算すると右にシフトします。
従来のコード:
b = a / 2;
ビット演算コード:
b = a >> 1;
剰余(モジュロ)演算
注:除数は2の累乗でなければなりません。
従来のコード:
a = a % 4;
ビット演算コード:
a = a & (4 - 1);
パリティを決定する
従来のコード:
if(a % 2);//奇数
if(!(a % 2));//偶数
ビット演算コード:
if(a & 1);//奇数
if(!(a & 1));//偶数
2つの数字を交換します
従来のコード:
int a = 1,b = 2,temp;
temp = a;
a = b;
b = temp;
ビット演算コード:
int a = 1,b = 2;
a ^= b;
b ^= a;
a ^= b;
ケース変換
実際、これは魔法ではありません!
または操作|
を使用して空格
、英語の文字を小文字に変換します
('a' | ' ') = 'a';
('A' | ' ') = 'a';
AND演算&
を使用して、下划线
英字を大文字に変換します
('b' & '_') = 'B'
('B' & '_') = 'B'
XOR演算を使用し^
て、空格
ケース反転英語の文字について
('d' ^ ' ') = 'D'
('D' ^ ' ') = 'd'
XOR
XOR(^)
- 0とバイナリで^演算を実行すると、このバイナリビットが取得されます。
0⨁0= 0、0⨁1 = 1 0 \ bigoplus 0 = 0,0 \ bigoplus 1 = 10⨁0=0 、0⨁1=1 - 同じバイナリで^演算を実行すると、返される結果は
01⨁1= 0、a⨁a= 0(a 1 \ bigoplus 1 = 0、a \ bigoplus a = 0(a1⨁1=0 、a⨁a=0 (aは任意の数にすることができます)))。 - ^可換法則と結合法則
を満たしますa⨁b⨁a=(a⨁a)⨁b=0⨁b= ba \ bigoplus b \ bigoplus a =(a \ bigoplus a)\ bigoplus b = 0 \ bigoplus b = ba⨁b⨁a=(A⨁a )⨁b=0⨁b=b
関連するleetcodeトピック:136。1
回だけ表示される数
389.違いを見つける
データ
ビット算術とは、2を掛けて2 +1を掛ける
アルゴリズムの記事を意味します。基本的な
ビット算術演算ビットをいじるハック
追記
継続的に更新されます!