教科书中的文字:
uint类型是32位无符号整数类型。它的默认值是 数字0u或0U(两者相当)。 ' u'信表明 该数字是uint类型(否则它被理解为int)。
那么0和0u之间有区别吗?如果没有,那么为什么默认值为' 0u'。使用' u'
后缀整数有什么好处为什么我必须使用,比如说' 5u'而不是仅仅使用' 5'?
答案 0 :(得分:3)
默认情况下,编译器会将数字文字推断为double或整数类型。
后缀u(或U)和l(或L)很少是必需的,因为uint,long和ulong类型几乎总是可以从int推断或隐式转换:
long i=5; //implicit lossless conversion from int literal to long
类似地,d后缀也是多余的,因为所有带小数点的文字都被推断为双倍。
double x= 4.0d; //(Here, d is redundant)
f(float)和m(十进制)后缀是最有用的,在指定float或decimal文字时应始终应用。如果没有f后缀,则后续行将无法编译,因为3.5将被推断为double类型,它没有隐式转换为float。
float f= 3.5f;
同样,如果没有m(十进制)后缀,则不会编译以下行。
decimal d=-1.25m;
总之,后缀指示编译器将整数文字(如123)视为特定类型的数字 - 例如long。类似地,double literal被认为是其他类型 - 例如float,decimal等。
答案 1 :(得分:2)
他们的类型不同。虽然根据上下文,可以将未填充的整数文字解释为uint
或int
,但u
后缀会强制它为无符号类型。例如,您无法在没有强制转换的情况下将5u
分配给int
变量,因为它具有uint
值。
当表达式的类型很重要时,您将使用它。例如,var i = 5
使i
成为int
,但var i = 5u
使i
成为uint
。
在将文字作为参数传递时,您也可以使用它来选择uint
重载。例如:
void Foo(int x);
void Foo(uint x);
Foo(5);
Foo(5u);
但一般来说,你不经常需要它。