如何将有符号整数转换为无符号整数?

How can I convert a signed integer into an unsigned integer?

这段代码是这样的:-

int x = -24;  
uint y = (uint) x;  
Console.WriteLine("*****" + y + "********");  
// o/p is *****4294967272********  

为什么在 C# 中出现这种类型的行为,详细说明会有所帮助。谢谢大家

有几种方法可以将 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;

负数(如-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  

试试下面的代码

int x = -24;  
Console.WriteLine("*****" + Convert.ToUInt32(x) + "********");