3

次のバイナリ文字列があるとします。

110110010110

必要なのは 4 番目の 5 番目と 6 番目のビットだけです。このようなマスクの使い方を学びました。

000000111000

したがって、二項&演算を使用すると、必要なビットを取得でき、あとはそれらを右にシフトするだけです。

C は単純な 2 進数では機能しないため、バイナリ マスク文字列を 16 進数に変換するのが最も簡単だと言われました。私の講師は、バイナリ文字列を 16 進数に変換する超簡単な方法を使用しました。

これらのマスクを作成する最も簡単で正しい方法は何ですか?

4

3 に答える 3

1

私の意見では、大きな文字列を末尾 (最下位ビット) から始めて 4 ビットの小さな断片に分割すると便利です。たとえば、2 進数は次の110110010110ように記述できます1101 1001 0110。4 ビットの断片に適切に切り分けることができない数値がある場合、たとえば1000011010のように書く必要があります10 0001 1010

さて、それははるかに簡単です。16 進数表記で0は 0 でf15 です。0 から数え始めますが、10 個の記号を使用する代わりに 16 を使用します。したがって、0、1、2、3、4、5、6、7、8、9 になります。 、a、b、c、d、e、f。

ビットの各グループをその 16 進記号に置き換えることができます! あなたの例 (ie 1101 1001 0110) ではd96、私の例 (ie 10 0001 1010) では になります21a。バイナリ文字列で見つかったすべての値について、最下位ビットを2 ^ (position - 1)結果に追加します。position = 1たとえば0110、位置 2 (すなわち2 ^ (2 - 1) = 2 ^ 1 = 2) と位置 3 (すなわち2 ^ (3 - 1) = 2 ^ 2 = 4) に 1 があるので、それは2 + 4 = 6です。ここで、後に0x続くのは 16 進数であり、それ0xd96

いずれにせよ、数字をそのまま書くことは 10 進数であることを意味し、a0を前に付けると 8 進数を示し、a を前に付けると0x16 進数を示します。

これが役立つことを願っています!:D

于 2013-08-26T14:37:50.713 に答える