2016-11-03 16 views
-1

2つのバイト配列:ary_aary_bはどちらも同じサイズです。配列のバイトのLSBを設定する

ary_aの各バイトのLSBを、ary_bの各バイトのLSBと同じに設定したいとします。たとえば、次の配列の

まずバイト:

ary_a[0] = 10110110 
ary_b[0] = 00101011 
//then ary_a[0] will be: 
ary_a[0] = 10110111 

第二バイト:

ary_a[1] = 10110111 
ary_b[1] = 00101011 
//then ary_a[1] will be: 
ary_a[1] = 10110111 //does not change 

サード:

ary_a[2] = 10110111 
ary_b[2] = 00101010 
//then ary_a[2] will be: 
ary_a[2] = 10110110 

などなど...

+0

ビットに対するANDおよびOR論理演算を使用します。あなたはあなたの好きな検索エンジンでたくさんの例を見つけて、確かにそれを行うことができます。 –

+0

最後のビットだけを比較することを意味しますか? – active92

+0

@ active92はい。最後のビットのみ – GPraz

答えて

1

トライコード以下

var ary_a = new byte[] 
{ 
    182, //1011 0110 
    183, //1011 0111 
    183 //1011 0111 
}; 

var ary_b = new byte[] 
{ 
    43, //0010 1011 
    43, //0010 1011 
    42 //0010 1010 
}; 

for(var i = 0; i<3; i++) 
{ 
    ary_a[i] = (byte)((ary_a[i] & ~1)|(ary_b[i] & 1)); 

    // print output 
    Console.WriteLine(Convert.ToString(ary_a[i], 2).PadLeft(8, '0')); 
} 

出力:

10110111 
10110111 
10110110 

フィドル:https://dotnetfiddle.net/0xQ342

0
for (int index = 0; index < ary_a.Length; index++) 
    { 
     int aLeast = LeastSigBit(ary_a[index]); 
     int bLeast = LeastSigBit(ary_b[index]); 

     ary_a[index] = bLeast == 1 ? (byte)(ary_a[index] | 1) : (byte)(~(1) & ary_a[index]); 
    } 

public static int LeastSigBit(int value) 
{ 
    return (value & 1); 
} 

まず、各バイト配列のインデックスから最下位ビットを取得し、その値がゼロまたは1つに基づいてary_a[index]を設定します。 ORを1とすると、最後のビットが設定されます 〜1でANDをとると、最後のビットが設定解除されます。 1とANDを行うと、最下位ビットが得られます。 このソリューションはsigned intで動作するので、同じロジックに基づいてunsigned intで動作するソリューションを考えることができます。

関連する問題