513などの数値を取得しています。この数値をビットマスク32に変換してから、各1ビットが配列内のどこにあるかをカウントする必要があります。
例513=0および9の場合
数値をbit32に変換してから、値を読み取るにはどうすればよいですか?
現在、数値を文字列の2進値に変換しています。
string bit = Convert.ToString(513, 2);
これを行うためのより効果的な方法はありますか?値をビット配列に変換するにはどうすればよいですか?
ありがとう
var val = 513;
for(var pos=0;;pos++)
{
var x = 1 << pos;
if(x > val) break;
if((val & x) == x)
{
Console.WriteLine(pos);
}
}
BitVector32クラスは、本当にビットマップを保持したい場合に、これを支援するユーティリティクラスです。
using System.Collections;
int originalInt = 7;
byte[] bytes = BitConverter.GetBytes(originalInt);
BitArray bits = new BitArray(bytes);
int ndx = 9; //or whatever ndx you actually care about
if (bits[ndx] == true)
{
Console.WriteLine("Bit at index {0} is on!", ndx);
}
番号のビット#iをテストするにはn
:
if ((n & (1 << i)) != 0)