数字基元及其后缀

时间:2013-02-07 19:36:15

标签: f#

我正在试图弄清楚这些后缀背后的真正含义是什么。换句话说,我正试图“翻译”它们。

+----+--------------+--------+
|    |     Type     | Suffix |
+----+--------------+--------+
|  1 | byte         | uy     |
|  2 | sbyte        | y      |
|  3 | int16        | s      |
|  4 | uint16       | us     |
|  5 | int, int32   |        |
|  6 | uint, uint32 | u      |
|  7 | int64        | L      |
|  8 | uint64       | UL     |
|  9 | float        |        |
| 10 | float        | f      |
| 11 | decimal      | M      |
+----+--------------+--------+

E.g。我认为“f”代表 f loat。但是,例如, “M”代表。为什么“d”不用于 d ecimal? “uy”代表什么?等等......

任何人都可以“翻译”这个吗?

2 个答案:

答案 0 :(得分:8)

我只能推测,但请注意,由于a-f是有效的十六进制值,因此它们不能用于整数类型的后缀。这可能是bYte和deciMal得到略少于助记符的缩写的原因。同样,请注意,对浮点数使用十六进制表示法有单独的(很少使用),浮点数为LF,浮点数为lf

根据这些规则,以下所有内容都是有效的文字:

0xb  // int, in hex
0xby // byte, in hex
0xabcdef // int, in hex
0xabcdeflf // float32, in hex

答案 1 :(得分:8)

我认为@kvb做了一个非常好的推测。这是两个小的补充:

  • 您的表格中存在一个小问题,f是用于float32的后缀(也称为single对应System.Single),而浮动点没有后缀变为F#float(对应System.Double)。浮点数的命名在F#中确实很混乱,所以我认为这没有任何特殊的逻辑(只需要区分两种浮点数)。

  • 您的表格也不包含l(用于int)。这意味着int16int32int64分别具有后缀slL(这可能意味着“短”,“ C语言中的“长”和“长”。

  • 我喜欢将小数字的M后缀读作“money”,因为十进制最常用于表示金钱(因为它的高精度)。我不确定这是前缀为M的原因,但很容易记住: - )。