C# 和“&”运算符用于指针强制转换
本文关键字:指针 用于 转换 运算符 amp | 更新日期: 2023-09-27 18:36:15
为什么 and 运算符在使用时行为不同:
- 带有联合国未签名的 int
-
使用字节数组在强制转换为 (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
假设一个 32 位的小端系统(就像当今绝大多数计算机中的任何英特尔处理器一样),将字节数组 {02 03 04 FF} 的地址转换为 32 位 int 的地址将导致值为 0xFF040302 的 int。因此结果。
换句话说,你认为它是"相同的值"是不正确的。