来自教科书的文本:
uint类型是32位无符号整数类型。它的默认值为数字0u或0U(两者等效)。字母“ u”表示数字是uint类型(否则它被理解为int)。
那么0和0u之间有区别吗?如果没有,那么为什么默认值是“0u”?使用整数后缀“ u”的优点是什么?
我何时必须使用“5u”,而不仅仅使用“5”?
来自教科书的文本:
uint类型是32位无符号整数类型。它的默认值为数字0u或0U(两者等效)。字母“ u”表示数字是uint类型(否则它被理解为int)。
那么0和0u之间有区别吗?如果没有,那么为什么默认值是“0u”?使用整数后缀“ u”的优点是什么?
我何时必须使用“5u”,而不仅仅使用“5”?
默认情况下,编译器会推断数字字面量为双精度或整型。
后缀 u(或 U)和 l(或 L)很少必要,因为 uint、long 和 ulong 类型几乎总是可以从 int 隐式转换或推断出来:
long i=5; //implicit lossless conversion from int literal to long
double x= 4.0d; //(Here, d is redundant)
f(float)和m(decimal)后缀是最有用的,当指定浮点或十进制字面量时应始终使用它们。如果没有f后缀,以下行将无法编译,因为3.5将被推断为double类型,而double类型没有到float类型的隐式转换。
float f= 3.5f;
decimal d=-1.25m;
总之,后缀指示编译器将整数字面量(如123)视为某种类型的数字,例如长整型。类似地,双精度字面量则被视为其他类型,例如浮点数、十进制数等。
long i=5
中,5
是一个 int
字面量还是被推断为一个 long
字面量?如果是前者,那么当它被赋值给 i
时是否会进行转换? - bgfvdu3wuint
或 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);
0
和 0u
的类型不同,而 0u
是 uint
类型。 - zneak