0

演算子 ' ' は型 ' ' および'&のオペランドには適用できませんulong'ulong*

私は何を間違っていますか?それが理にかなっていれば、整数がどのマスクで構成されているかを見つけようとしています。

例えば

63 = 1+2+4+8+16+32

unsafe
{
    UInt64 n = Convert.ToUInt64(textAttributes.Text);
    UInt64* p = &n;
    for(UInt64 i = 1; i <= n; i <<= 1) 
    {
        if (i & p) 
        {
            switch(i)
            {
                default:
                    break;
            }
        }
    }
}
4

3 に答える 3

2

これには安全でないコードは必要ありません。

ポインターと整数の間に演算子 & を適用するため、コンパイラ エラーは正当です。

あなたはおそらく欲しい:

    UInt64 n = 63;
    for(int i = 0; i < 64; i++) 
    {
        UInt64 j = ((UInt64) 1) << i;
        if ((j & n) != 0) 
        {
          Console.WriteLine(1 << i);
        }
    }
于 2014-05-29T03:48:09.517 に答える
0

そのような操作に安全でないコンテキストは必要ありません

これを試して :

static void Main(string[] args)
{
    UInt64 n = Convert.ToUInt64(63);

    int size = Marshal.SizeOf(n) * 8;
    for (int i = size - 1; i >= 0; i--)
    {
        Console.Write((n >> i) & 1);
    }
}

これは印刷0000000000000000000000000000000000000000000000000000000000111111されるので、どのビットが設定されているかがわかります。

于 2014-05-29T03:58:14.260 に答える