Как преобразовать uint в int в C #?
uintк , longкак longможет содержать все uintзначения , где как intне может ( как уже упоминалось )
Как преобразовать uint в int в C #?
uintк , longкак longможет содержать все uintзначения , где как intне может ( как уже упоминалось )
Ответы:
Дано:
uint n = 3;
int i = checked((int)n); //throws OverflowException if n > Int32.MaxValue
int i = unchecked((int)n); //converts the bits only
//i will be negative if n > Int32.MaxValue
int i = (int)n; //same behavior as unchecked
или
int i = Convert.ToInt32(n); //same behavior as checked
--РЕДАКТИРОВАТЬ
Включенная информация, упомянутая Кенаном Е.К.
uintбольше, чем int.MaxValueвы, вы получите отрицательный результат, если вы используете приведение, или исключение, если вы используете Convert.ToInt32.
Предположим, вы хотите просто поднять 32 бита из одного типа и сбросить их как есть в другой тип:
uint asUint = unchecked((uint)myInt);
int asInt = unchecked((int)myUint);
Тип назначения слепо выберет 32 бита и интерпретирует их заново.
И наоборот, если вас больше интересует сохранение десятичных / числовых значений в пределах диапазона самого типа назначения:
uint asUint = checked((uint)myInt);
int asInt = checked((int)myUint);
В этом случае вы получите исключения переполнения, если:
В нашем случае мы хотели, чтобы uncheckedрешение сохраняло 32 бита как есть, поэтому вот несколько примеров:
int....: 0000000000 (00-00-00-00)
asUint.: 0000000000 (00-00-00-00)
------------------------------
int....: 0000000001 (01-00-00-00)
asUint.: 0000000001 (01-00-00-00)
------------------------------
int....: -0000000001 (FF-FF-FF-FF)
asUint.: 4294967295 (FF-FF-FF-FF)
------------------------------
int....: 2147483647 (FF-FF-FF-7F)
asUint.: 2147483647 (FF-FF-FF-7F)
------------------------------
int....: -2147483648 (00-00-00-80)
asUint.: 2147483648 (00-00-00-80)
uint...: 0000000000 (00-00-00-00)
asInt..: 0000000000 (00-00-00-00)
------------------------------
uint...: 0000000001 (01-00-00-00)
asInt..: 0000000001 (01-00-00-00)
------------------------------
uint...: 2147483647 (FF-FF-FF-7F)
asInt..: 2147483647 (FF-FF-FF-7F)
------------------------------
uint...: 4294967295 (FF-FF-FF-FF)
asInt..: -0000000001 (FF-FF-FF-FF)
------------------------------
int[] testInts = { 0, 1, -1, int.MaxValue, int.MinValue };
uint[] testUints = { uint.MinValue, 1, uint.MaxValue / 2, uint.MaxValue };
foreach (var Int in testInts)
{
uint asUint = unchecked((uint)Int);
Console.WriteLine("int....: {0:D10} ({1})", Int, BitConverter.ToString(BitConverter.GetBytes(Int)));
Console.WriteLine("asUint.: {0:D10} ({1})", asUint, BitConverter.ToString(BitConverter.GetBytes(asUint)));
Console.WriteLine(new string('-',30));
}
Console.WriteLine(new string('=', 30));
foreach (var Uint in testUints)
{
int asInt = unchecked((int)Uint);
Console.WriteLine("uint...: {0:D10} ({1})", Uint, BitConverter.ToString(BitConverter.GetBytes(Uint)));
Console.WriteLine("asInt..: {0:D10} ({1})", asInt, BitConverter.ToString(BitConverter.GetBytes(asInt)));
Console.WriteLine(new string('-', 30));
}
Convert.ToInt32()принимает uintв качестве значения.
uint i = 10;
int j = (int)i;
или
int k = Convert.ToInt32(i)
int intNumber = (int)uintNumber;
В зависимости от того, какие значения вы ожидаете, вы можете проверить, насколько велик uintNumber, прежде чем выполнять преобразование. Тип int имеет максимальное значение около 0,5 uint.