C# 数值类型

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types

整数文本

整数文本可以是

  • 十进制:不使用任何前缀
  • 十六进制:使用 0x0X 前缀
  • 二进制:使用 0b0B 前缀(在 C# 7.0 和更高版本中可用)

下面的代码演示每种类型的示例:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;int a = 0b_1101;//输出13

前面的示例还演示了如何将 _ 用作数字分隔符(从 C# 7.0 开始提供支持)。 可以将数字分隔符用于所有类型的数字文本。

整数文本的类型由其后缀确定,如下所示:

  • 如果文本没有后缀,则其类型为以下类型中可表示其值的第一个类型:intuintlongulong

    备注

    文本解释为正值。 例如,文本 0xFF_FF_FF_FF 表示 uint 类型的数字 4294967295,但其位表现形式与 int 类型的数字 -1 相同。 如果需要特定类型的值,请将文本强制转换为该类型。 如果文本值无法以目标类型表示,请使用运算符 unchecked。 示例:unchecked((int)0xFF_FF_FF_FF) 生成 -1

  • 如果文本以 Uu 为后缀,则其类型为以下类型中可表示其值的第一个类型:uintulong

  • 如果文本以 Ll 为后缀,则其类型为以下类型中可表示其值的第一个类型:longulong

    备注

    可以使用小写字母 l 作为后缀。 但是,这会生成一个编译器警告,因为字母 l 可能与数字 1 混淆。 为清楚起见,请使用 L

  • 如果文本的后缀为 ULUluLulLULulUlu,则其类型为 ulong

如果由整数字面量所表示的值超出了 UInt64.MaxValue,则将出现编译器错误 CS1021

如果确定的整数文本的类型为 int,且文本所表示的值位于目标类型的范围内,则该值可以隐式转换为 sbytebyteshortushortuintulongnintnuint

C#
byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

如前面的示例所示,如果文本的值不在目标类型的范围内,则会发生编译器错误 CS0031

还可以使用强制转换将整数文本所表示的值转换为除确定的文本类型之外的类型:

C#
var signedByte = (sbyte)42;
var longVariable = (long)42;

 

 

int a = 1, b = 2;
long n = 123L;//避免混淆加L
double c = 3.0d;//可以加或不加d
float d = 0.3f;

float f = 134.45E-2f;// output: 1.3445
decimal m = 1.5E6m; // output: 1500000 E基地为10 m或大M都可以

posted @ 2022-07-02 23:58  小林野夫  阅读(200)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/