【问题标题】:C# short/long/int literal format?C# 短/长/int 文字格式?
【发布时间】:2011-08-14 19:28:05
【问题描述】:

在 C/C#/等中。你可以告诉编译器一个文字数字不是它看起来的样子(即float而不是doubleunsigned long而不是int):

var d = 1.0;  // double
var f = 1.0f; // float
var u = 1UL;  // unsigned long

等等

有人能指点我这些清单吗?我正在专门寻找shortInt16 的后缀。

【问题讨论】:

标签: c# literals language-specifications


【解决方案1】:
var d  = 1.0d;  // double
var d0 = 1.0;   // double
var d1 = 1e+3;  // double
var d2 = 1e-3;  // double
var f  = 1.0f;  // float
var m  = 1.0m;  // decimal
var i  = 1;     // int
var ui = 1U;    // uint
var ul = 1UL;   // ulong
var l  = 1L;    // long

我想就是这样……没有用于 short/ushort/byte/sbyte 的文字说明符

【讨论】:

  • 这是否意味着您必须在使用 short/ushort/byte/sbyte 的任何地方进行投射?例如: somebyte = somebool ? (字节) 1 : (字节) 0;
  • @mola,是的,除非所需的类型是明确的(例如 byte b = 42;
  • @mola somebyte = (byte)(somebool ? 1 : 0);
  • 只是添加这些文字后缀的大写和小写是等价的,例如1l1L 都将被视为长整数,但肯定 1L1l 更具可读性。
  • @DzmitryLahoda 你是什么意思?该问题中讨论的后缀尚未实现。
【解决方案2】:

如果你的变量还不是很短,你必须明确地转换它:

Object s = (Int16) 1;

【讨论】:

  • 旁注:我认为这会导致拳击转换。
  • 确实会导致装箱,因为 Int16 是值类型,Object 是引用类型。
【解决方案3】:

来自§2.4.4.2 Integer literals

整数字面量的类型确定如下:

  • 如果文字没有后缀,则它具有以下类型中的第一个可以表示其值:intuintlongulong
  • 如果文字以Uu 为后缀,则它具有可以表示其值的第一个类型:uintulong
  • 如果文字以Ll 为后缀,则它具有可以表示其值的第一个类型:longulong
  • 如果文字以ULUluLulLULulUlu为后缀,则其类型为lu34@4。

来自§2.4.4.3 Real literals

如果没有指定实数类型后缀,则实数字面量的类型为双精度。否则,实数类型后缀决定实数字面量的类型,如下:

  • Ff 为后缀的真实文字属于float 类型。例如,1f1.5f1e10f123.456F 都是 float 类型。
  • Dd 为后缀的真实文字属于double 类型。例如,1d1.5d1e10d123.456D 都是 double 类型的文字。
  • Mm 为后缀的真实文字属于decimal 类型。例如,文字1m1.5m1e10m123.456M 都是decimal 类型。该文字通过取精确值转换为十进制值,并在必要时使用银行四舍五入四舍五入到最接近的可表示值(第 4.1.7 节)。除非值被四舍五入或值为零(在后一种情况下,符号和比例将为 0),否则文字中明显的任何比例都会被保留。因此,文字 2.900m 将被解析为带有符号 0、系数 2900 和刻度 3 的小数。

【讨论】:

    【解决方案4】:

    没有一个简称。只需使用short s = 1;

    【讨论】:

    • 有趣的是,这个编译:short z1 = (0 == 1 ? 0 : 1); 但这不是:short y = 1; short z2 = (0 == 1 ? 0 : y);(抱歉,cmets 中不允许换行)
    • @yoyo:那是因为 if 分支中的 0 被转换为 int 之前分配给 z2。如果您在分支中使用两个shorts,则结果将再次为short。使用 if/else,编译器无法知道您的 int 可以表示为 short
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多