6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ビット演算 [6]:変数内の特定のビットを交換する

Posted at

ビット演算 [6] では、排他的論理和(^)を用いて、異なる変数の同じ位置のビットを交換する方法を示したが、そのテクニックを使ってひとつの変数内の特定のビットを交換することも可能だ。

変数 x の交換したいビットを mask1, mask2 とし、それらが n ビット離れている場合(ただし mask1 >> n = mask2 とする)、反転マスクを以下のように計算することが出来る。

auto t = ((x >> n) ^ x) & mask2;
t |= t << n;

この反転マスクを用いると、以下の文で mask1, mask2 の部分を交換することができる。

x ^= t;

例えば、変数xの下位4bitと、そのすぐ上の4bitを交換したい場合は、以下のように記述する。

auto t = ((x >> 4) ^ x) & 0x0f;
t |= t << 4;
x ^= t;

もし、xの値が 0x123 であれば、上記を実行後は 0x132 となる。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?