8

intこの変数があるとしましょうv1

1100 1010

そして、この変数int v2

1001 1110

結果が次v2のようになるように、最後の 4 ビットを の最後の4 ビットにコピーする必要があります。v1

1100 1110
^    ^ last four bits of v2
|
| first four bits of v1

C または C++ でこれを行うにはどうすればよいでしょうか。ビット演算に関する記事をいくつか読みましたが、これに関する具体的な情報は見つかりませんでした。

4

4 に答える 4

19

ビット単位の操作は、探すのに適したものでした。

v1 = (v1 & ~0xf) | (v2 & 0xf);

あなたが読んだ記事からあなたが理解できなかった特定の何かがありますか?

于 2013-01-18T02:54:13.767 に答える
6

どうですか

v1 = (v1 & 0xf0) | (v2 & 0xf);

「v1」の値がより多くのビットを持っている場合は、より大きなマスクを使用する必要があります:

v1 = (v1 & 0xfffffff0) | (v2 & 0xf);
于 2013-01-18T02:53:46.433 に答える
3

私の意見では、それを書くための最も読みやすい方法:

v1 &= ~0x0F;       // clear least sig. nibble of v1
v1 |= v2 & 0x0F;   // copy least sig. nibble of v2 into v1
于 2013-01-18T07:34:46.527 に答える
2

試す:

v1 = (v2 & 0x0F) | (v1 & 0xF0);
于 2013-01-18T02:55:59.240 に答える