ビット演算の使用の要約

序文

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 = 100=0 01=1
  • 同じバイナリで^演算を実行すると、返される結果は
    01⨁1= 0、a⨁a= 0(a 1 \ bigoplus 1 = 0、a \ bigoplus a = 0(a11=0 aa=0 aは任意の数にすることができます)))。
  • ^可換法則と結合法則
    を満たしますa⨁b⨁a=(a⨁a)⨁b=0⨁b= ba \ bigoplus b \ bigoplus a =(a \ bigoplus a)\ bigoplus b = 0 \ bigoplus b = baba=Aa b=0b=b
    関連するleetcodeトピック:136。1
    回だけ表示される数
    389.違いを見つける

データ

ビット算術とは、2を掛けて2 +1を掛ける
アルゴリズムの記事を意味します。基本的な
ビット算術演算ビットをいじるハック

追記

継続的に更新されます!

おすすめ

転載: blog.csdn.net/XZ2585458279/article/details/109535828