gpt4 book ai didi

c# - 小整数的文字后缀

转载 作者:行者123 更新时间:2023-11-30 16:59:41 24 4
gpt4 key购买 nike

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

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

代替

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

出于好奇,编译器是否以不同方式对待这两个示例?如果是这样,它会优化吗?整数是原始类型,所以不会有任何强制转换吧?

最佳答案

两个代码示例是相同的。

这是一个扩大转换,意味着它不可能导致数据丢失,因此编译器可以自动处理它。所有扩大转换都是隐式转换。您可以在 .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)
{
}

但这不是你应该写的东西,因为毫无意义的转换会增加不必要的困惑,从而模糊代码的含义。

关于c# - 小整数的文字后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com