2011-11-27 16 views
5

私はこれを何と呼ぶべきかわかりません。これはグーグル・グーグルを難しくしています。与えられたビット数が設定された整数からバイトへ

私は整数、たとえば3を持っていて、これを11100000に変換します。つまり、最も重要なビットから整数のビット数の値を設定したバイトに変換します。

私はそれがで行うことができると思います:

byte result = 0; 
for(int i = 8; i > 8 - 3; i--) 
    result += 2^i; 

より高速/より素敵または、好ましくは何があり、標準ライブラリは、.NETに含まれて?

+0

整数が8より大きい場合はどうなりますか? –

+6

小数点^はPower演算子ではなくExclusive Orです。 –

+0

@Martin Hahaの感謝は、ちょうど実現するために私に数秒かかりました。あなたがプログラミング中に紙の方程式を書くことも起こるなら、時々忘れやすい。 – Max

答えて

11
int n = 3; // 0..8 
int mask = 0xFF00; 
byte result = (byte) (mask >> n); 
+0

+1、非常に良い。キャストは厳密に必要ですか? – Cameron

+0

n> 8はどうですか? –

+0

@Cameron、そうですが、 'mask >> n'の結果は' int'型です。 –

5

のみいくつかの可能性があるので、あなたはちょうどそれらをキャッシュできます。

// Each index adds another bit from the left, e.g. resultCache[3] == 11100000. 
byte[] resultCache = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0XF8, 0xFC, 0xFE, 0xFF }; 

誤っnの値を取得しようとした場合にも、代わりにサイレントエラーの例外を取得したいです> 8.

+0

簡単に見落とされるこれらのタイプの問題(テーブルルックアップ)の多くに対して、シンプルで効果的なアプローチを指摘し、すべてのプログラマーが自分のBOXに入れなければならない慰安賞。 (この場合は、Henk'sほど良い解決策ではありません) –

+0

@JasonWilliamsありがとうございました。この代替案を投稿する前に、私はHenkのエレガントなソリューションに投票しました:-)。 –

関連する問題