0xFFFFFFFF转成int为什么可能得到负数?
因为c#中int是32位有符号整数,最高位为1时按补码规则解释为负数。0xffffffff的十六进制值对应二进制全1,作为int解析时其值为-1。若需保留无符号含义,应使用uint或long类型转换。

如何正确将0xFFFFFFFF转为无符号整数?
通过显式转换为uint或ulong类型,可避免符号扩展导致的负数结果。(uint)0xFFFFFFFF返回4294967295,而(long)0xFFFFFFFF返回4294967295(正数),但需注意long仍是有符号类型,仅当值小于2^63时才为正。

using System;
class Program
{
static void Main()
{
uint u = 0xFFFFFFFF;
long l = 0xFFFFFFFF;
int i = (int)0xFFFFFFFF;
Console.WriteLine("uint: " + u);
Console.WriteLine("long: " + l);
Console.WriteLine("int: " + i);
}
}当输入为0x80000000时,int转换结果是什么?
0x80000000作为int时为最小负数-2147483648,因为其最高位为1且其余位为0,符合补码表示的最小值。该行为与0xFFFFFFFF类似,均因符号位被激活而产生负数。


















