我不明白为什么C#在将int类型表示为-1时,也将原义0xFFFFFFFF视为uint。
将以下代码输入到此处显示的立即窗口中,并显示输出:
int i = -1;
-1
string s = i.ToString("x");
“ ffffffff”
int j = Convert.ToInt32(s, 16);
-1
int k = 0xFFFFFFFF;
无法将类型'uint'隐式转换为'int'。存在显式转换(您是否缺少演员表?)
int l = Convert.ToInt32(0xFFFFFFFF);
未处理OverflowException:对于Int32,值太大或太小。
为什么可以无问题地转换字符串十六进制数,而仅使用未检查的形式转换文字呢?
为什么0xFFFFFFFF表示-1时是uint?
因为您在写时不是在写位模式
i = 0xFFFFFFFF;
您正在按照C#的规则为整数文字写数字。使用C#的整数文字,要写一个负数,我们要写一个a,-
后跟数字的大小(例如-1
),而不是我们想要的位模式。这是真的好,我们预计不会写的位模式,这将使它真正尴尬的写负数。当我想要-3时,我不想写0xFFFFFFFD
。:-)而且我真的不想不必F
根据类型的大小(0xFFFFFFFFFFFFFFFD
对于long
-3
)来更改前导s的数量。
通过上面的链接可以说选择文字类型的规则如下:
如果文字没有后缀,它具有第一这些类型的,其中它的值可以表示的:
int
,uint
,long
,ulong
。
0xFFFFFFFF
不适合int
最大为正值的0x7FFFFFFF
,因此列表中的下一个是uint
,它确实适合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句