小整数的文字后缀

时间:2014-05-04 11:22:15

标签: c#

当我使用长整数的小数字时,我很少自动添加特殊后缀。 例如,我会写:

for (uint div = 0; div < 100; div += 2)
{
}

而不是

for (uint div = 0U; div < 100U; div += 2U)
{
}

出于好奇,编译器是否以不同的方式对待这两个例子?如果是这样,它会优化吗?整数是原始类型,所以没有任何演员权利?

1 个答案:

答案 0 :(得分:2)

两个代码示例相同。

这是一个扩展转换,意味着它不可能导致数据丢失,因此编译器可以自动处理它。所有扩展转换都是隐式转换。您可以在.NET Framework here中阅读有关数据类型转换的更多信息。

以下也是一个扩大的转换,因此隐含地完成:

int  value = 16;
long other = value;  // the int is implicitly converted to a long

所有这些扩大的转化都是可能的,而且是隐含的:

 byte          => short, short, int, uint, ulong, float, double, decimal
 sbyte         => short, int, long, float, double, decimal
 short         => int, long, float, double, decimal
 ushort        => int, uint, long, ulong, float, double, decimal
 int           => long, float, double, decimal
 uint          => long, ulong, float, double, decimal
 long          => float, double, decimal
 ulong         => float, double, decimal
 float         => double

你在问题​​中提到了铸造。转换是显式转换(与隐式转换相反)。在这种情况下,没有转换,因为转换是隐含的。但即使有铸造,在这种情况下也没有成本,因为这些都是数字文字。所有的演员都将在编译时完成。此代码在功能上也是等效的:

for (uint div = (uint)0; div < (uint)100; div += (uint)2)
{
}

但不是你应该写的东西,因为毫无意义的演员会增加不必要的混乱,这会掩盖代码的含义。