C# 和“&”运算符用于指针强制转换

本文关键字:指针 用于 转换 运算符 amp | 更新日期: 2023-09-27 18:36:15

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

  1. 带有联合国未签名的 int
  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 

C# 和“&”运算符用于指针强制转换

假设一个 32 位的小端系统(就像当今绝大多数计算机中的任何英特尔处理器一样),将字节数组 {02 03 04 FF} 的地址转换为 32 位 int 的地址将导致值为 0xFF040302 的 int。因此结果。

换句话说,你认为它是"相同的值"是不正确的。