2012-03-23 18 views
2

私はバイトAとバイトBを持っています。私はAからの1ビットおきのビットと、Bからの1ビットおきのビットを探しています。したがって、A = 10011010とB = 01110010ならばCは10110101 1011はAのすべてのビットであり、0101はBの1ビットおきのビットです。2バイトを組み合わせる

答えて

2

これを試してみてください:

byte C = (byte)(
    (A & 0x80) | 
    ((A & 0x20) << 1) | 
    ((A & 0x08) << 2) | 
    ((A & 0x02) << 3) | 
    ((B & 0x80) >> 4) | 
    ((B & 0x20) >> 3) | 
    ((B & 0x08) >> 2) | 
    ((B & 0x02) >> 1)); 

それがオンラインで作業を参照してください:このようなideone

0

何かがそれを行う必要があります。

var nibble1 = ((a & 0x80) << 3) | ((a & 0x20) << 2) | 
       ((a & 0x08) << 1) | (a & 0x02); 
var nibble2 = ((b & 0x80) << 3) | ((b & 0x20) << 2) | 
       ((b & 0x08) << 1) | (b & 0x02); 

var result = (nibble1 << 4) | nibble2; 

各入力について、あなたが実際には( "第一" を取る、バイトもう片方から数えてみるのが通例ですが、ここではより簡単に聞こえます)バイト、3桁シフトする(他の人のために余裕を持たせるため)、 "thi rd "バイト(2つの場所をシフトする)など。

次に、計算した最初のニブルを4つの場所(2番目のスペースを作成するために)に移動して貼り付けます。

0
$a = 154; //10011010 
$b = 114; //01110010 

$expected = 181; //10110101 

$result = (($a>>1)&1)+(($a>>2)&2)+(($a>>3)&4)+(($a>>4)&8) << 4 
      | (($b>>1)&1)+(($b>>2)&2)+(($b>>3)&4)+(($b>>4)&8); 


echo $expected == $result; 

もう1

...これは、より効率的に行うことができ、私はしばらくそれについて考えてみましょう:

$a = 154; //10011010 
$b = 114; //01110010 

$expected = 181; //10110101 

$result = ($a&0x80)+(($a<<1)&0x40)+(($a<<2)&0x20)+(($a<<3)&0x10)+ 
     (($b>>4)&0x8)+(($b>>3)&0x4)+(($b>>2)&0x2)+(($b>>1)&0x1); 

echo $expected == $result; 

...そして私が気づきますC#タグ...