当前位置:  开发笔记 > 编程语言 > 正文

数字文字后面的C#后缀

如何解决《数字文字后面的C#后缀》经验,为你挑选了2个好方法。

我是C#的新手,想要了解价值观是如何运作的.如果我查看一个正常的整数值,它有三个重要部分:类型,名称和值.

int testInt = 3;
 |    |       |
Type Name   Value

但是当我看到浮点值时,由于后缀,它会让我感到困惑F.

float testFloat = 3.0F;
  |      |        |  |
 Type   Name  Value Type

现在有两种类型,如果没有F后缀,则值为double.但是,当我可以用声明双变量时,为什么会发生这种情况

double testDouble = 3.0D;

double作为第一个词应该是足够了,不应该吗?带有后缀M的十进制值也是如此:

decimal testDecimal = 3.0M;

然后,当涉及到其他后缀时,它开始让我感到困惑:

ulong bigOne = 2985825802805280508UL;

ulong之前在测试中使用过,并且知道它u是"无符号"的,并且它的值是正常值的两倍.然后你再次得到U作为后缀,谷歌的文字就像谷歌说的那样.据我了解,"文字"是包含数字的值类型.但我不明白的是,即使没有后缀,为什么这个ulong工作呢?

ulong bigOne = 2985825802805280508;

然后我尝试了不同的东西来理解后缀的重要性

byte testLong = 12312UL;

这不起作用,因为字节(254)的值太高而后缀不会将其转换为长变量.

为什么第一个单词(类型)不足以申报?第一个词应该足以告诉类型.最好的做法是始终为值赋予后缀吗?



1> Matt Burland..:

你在这里混淆了两件不同的事情:

float testFloat = 3.0F;

float告诉编译器变量testFloat时便会浮点值.该F告诉编译器的文字 3.0float.编译器需要先了解这两个部分,然后才能决定是否可以使用无转换或隐式转换将字面值分配给变量.

例如,您可以这样做:

float testFloat = 3;

那没关系.因为编译器将看到3一个文字整数,但它知道它可以将它分配给一个浮点而不会丢失精度(这是隐式转换).但是如果你这样做:

float testFloat = 3.0;

3.0是一个文字双(因为这是没有后缀的默认值)并且它不能隐式(即自动)将double转换为float,因为float的精度较低.换句话说,信息可能会丢失.所以你要么告诉编译器它是文字浮点数:

float testFloat = 3.0f;

或者你告诉它你可以通过使用显式转换来降低精度:

float testFloat = (float)3.0;


究竟.如果你执行`var result = 4/3;`,编译器必须决定它是整数还是浮点运算,而这只取决于赋值运算符右侧的内容.默认情况下,整数值被视为"int",十进制值被视为"double".因此,这将使`result`成为1的`int`.如果你改为`4/3.0`,`result`将是一个带有1.3333333值的`double`.

2> Servy..:

所有1个表达式都需要可解析为一个类型.所以表达式42 总是需要只有一种类型(碰巧是一种int).int如果将其分配给int变量,double则它不能是a,如果将其分配给a,则不能double.一个表达式中使用的上下文是从未1用来确定它解析为何种类型.

这就是数字文字可以有后缀的原因; 它是一种在该表达式中定义该表达式类型的方法.

请注意,许多数字类型之间也存在隐式转换,因此如果您编写double d = 42;表达式42 实际上是一个整数,但是在其上执行了一个隐式转换运算符,它将double在赋值之前将其转换为a .

1这里有一些例外,例如lambdas,表达式的类型取决于它的使用方式和方法组; 在真空中这些表达没有类型.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有