Bagaimana cara mengubah uint ke int di C #?
uintke a longkarena longkaleng berisi semua uintnilai di mana sebagai tidak intbisa ( seperti yang telah disebutkan )
Bagaimana cara mengubah uint ke int di C #?
uintke a longkarena longkaleng berisi semua uintnilai di mana sebagai tidak intbisa ( seperti yang telah disebutkan )
Jawaban:
Diberikan:
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
atau
int i = Convert.ToInt32(n); //same behavior as checked
--EDIT
Info yang disertakan seperti yang disebutkan oleh Kenan EK
uintlebih besar dari int.MaxValueAnda akan mendapatkan hasil negatif jika Anda menggunakan cast, atau pengecualian jika Anda menggunakan Convert.ToInt32.
Catat kata kunci checkeddan unchecked.
Ini penting jika Anda ingin hasilnya dipotong ke int atau pengecualian dimunculkan jika hasilnya tidak sesuai dengan 32 bit yang ditandatangani. Defaultnya tidak dicentang.
Dengan asumsi Anda hanya ingin mengangkat 32 bit dari satu jenis dan membuangnya apa adanya ke jenis lainnya:
uint asUint = unchecked((uint)myInt);
int asInt = unchecked((int)myUint);
Jenis tujuan akan secara membabi buta memilih 32 bit dan menafsirkannya kembali.
Sebaliknya, jika Anda lebih tertarik untuk mempertahankan nilai desimal / numerik dalam rentang jenis tujuan itu sendiri:
uint asUint = checked((uint)myInt);
int asInt = checked((int)myUint);
Dalam kasus ini, Anda akan mendapatkan pengecualian luapan jika:
Dalam kasus kami, kami menginginkan uncheckedsolusi untuk mempertahankan 32 bit sebagaimana adanya, jadi berikut beberapa contohnya:
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()Dibutuhkan uintsebagai nilai.
uint i = 10;
int j = (int)i;
atau
int k = Convert.ToInt32(i)
int intNumber = (int)uintNumber;
Bergantung pada jenis nilai yang Anda harapkan, Anda mungkin ingin memeriksa seberapa besar uintNumber sebelum melakukan konversi. Sebuah int memiliki nilai maksimal sekitar 0,5 dari sebuah uint.