如何将有符号整数转换为无符号整数?
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) + "********");
这段代码是这样的:-
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) + "********");