1

为什么 and 运算符在使用时表现不同:

  1. 带有无符号整数
  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 位little-endian 系统(与当今绝大多数计算机中的任何 Intel 处理器一样),将字节数组 {02 03 04 FF} 的地址转换为 32 位 int 的地址将导致 int值为 0xFF040302。因此结果。

换句话说,您认为它是“相同值”的假设是不正确的。

于 2012-06-02T12:31:40.510 回答