1

and演算子を使用すると動作が異なる理由:

  1. unsignedintを使用
  2. (uint *)にキャストされたときに同じ値を表すバイト配列を使用

    unsafe
    {
        fixed (byte* i = new byte[4] { 0x02, 0x03, 0x04, 0xFF })
        {
            uint m = 0x020304FF;
    
            Console.WriteLine("{0:X}",m & 0xFF000000); 
    
            Console.WriteLine("{0:X}",*(uint*)i & 0xFF000000); 
         }
     }
    

結果は

     2000000
     ff000000 
4

1 に答える 1

2

32ビットのリトルエンディアンシステム(今日のコンピューターの大部分では、他のIntelプロセッサーと同様)を想定すると、バイト配列{02 0304FF}のアドレスを32ビットのintのアドレスにキャストするとintになります。値は0xFF040302です。したがって、結果。

言い換えれば、それが「同じ値」であるというあなたの仮定は正しくありません。

于 2012-06-02T12:31:40.510 に答える