मैं C # में uint को int में कैसे बदलूं?
uintएक ऐसे longरूप में परिवर्तित करना सुरक्षित होगा longजिसमें सभी uintमान शामिल हो सकते हैं जहाँ एक के रूप में intनहीं ( जैसा कि पहले ही उल्लेख किया गया है )
मैं C # में uint को int में कैसे बदलूं?
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
--EDIT
केनान ईके द्वारा उल्लिखित जानकारी शामिल है
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);
इस स्थिति में, आपको ओवरफ़्लो अपवाद मिलेगा यदि:
हमारे मामले में, हम 32 uncheckedबिट्स को संरक्षित करने का समाधान चाहते हैं, इसलिए यहां कुछ उदाहरण दिए गए हैं:
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 का .5 होता है।