这段代码就像: -
int x = -24;
uint y = (uint) x;
Console.WriteLine("*****" + y + "********");
// o/p is *****4294967272********
为什么在C#中这种行为,详细阐述会有所帮助。谢谢你们。
答案 0 :(得分:17)
负数(如-24
)表示为二进制补码,请参阅
en.wikipedia.org/wiki/Two's_complement
了解详情。在你的情况下
24 = 00000000000000000000000000011000
~24 = 11111111111111111111111111100111
~24 + 1 = 11111111111111111111111111101000 =
= 4294967272
将int
投射到uint
时要小心,因为-24
超出 uint
范围([0..uint.MaxValue]
)你可以被抛出OverflowException
。安全实施是
int x = -24;
uint y = unchecked((uint) x); // do not throw OverflowException exception
答案 1 :(得分:7)
将int
转换为uint
int x;
技术#1
uint y = Convert.ToUInt32(x);
技术#2
uint y = checked((uint) x);
技术#3
uint y = unchecked((uint) x);
技术#4
uint y = (uint) x;
答案 2 :(得分:-2)
尝试以下代码
int x = -24;
Console.WriteLine("*****" + Convert.ToUInt32(x) + "********");