代码中不同的数值表示法官方文档都有,但这东西不常用,要用时又要专门翻下文档,所以整个博客记录整理一下
数字表示
官方文档-整数:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/integral-numeric-types
官方文档-浮点:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types#code-try-3
int a1=1; //1
int a2=0xFF; //255
int a3=0b_1111_1111; //255long l1=1L; //1
ulong ul1=10_10UL; //1010double d1=10_10D; //1010.00
double d1=10_10.10_10D; //1010.1010float f1=10_10F; //1010.0
float f1=10_10.10_10F; //1010.1010decimal dm1=10_10M; //1010.00
decimal dm2=10_10.10_10M; //1010.1010
总结
- 前缀后缀都不区分大小写,且一般用大写,避免和其它字符搞混。
- 前缀0x:16进制表示法,可以用_分割,可以用在各种类型上面。但需要注意类型问题,比如
int a=0xFF_FF_FF_FF
会提示类型错误。 - 前缀0b:2进制表示法,可以用_分割,可以用在各种类型上面。
- 整数文本因为是16进制或2进制表示,这2种方式本身是没有正负号概念的,会解析为正值。比如文本
0xFF_FF_FF_FF
在uint
类型中表示数字4294967295
,在int
类型中表示数字-1
- 后缀U:表示uint或ulong。
- 后缀L:表示long或ulong,一般用大写,用小写容易和数字1搞混。
- 后缀UL:后缀U和后缀L的组合。
- 后缀D:表示double
- 后缀F:表示float
- 后缀M:表示decimal
枚举
官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/enum
枚举支持在类型上面写文件,所以可以使用下面这种方式使用flags
:
[Flags]public enum PermissionType : uint{ALL = 0xFF_FF_FF_FF,Read = 0b_00_01,Write = 0b_00_10,Execute = 0b_01_00,ReadWrite = Read | Write,ReadExecute = Read | Execute}
第一个ALL
用0x
方式写16进制:我习惯性枚举写一个默认值,可能是None
或是ALL
。这里写ALL
时需要保证他的所有2进制位
为1,用0x
直接表示比较方便,同时需要替换上面的类型为uint
,默认的int
原生不支持这种写法,需要替换为unchecked((int)0xFF_FF_FF_FF)
就不太美观。
这种方式书写Flags
的枚举,避免了以前口算1,2,4,8..
的麻烦,就算你心算强大,当枚举项比较多的时候就不那么容易计算了(你一口气算算2^14=?
)。现在这种写法直接让你书写2进制,需要增加时进位就行了,非常方便!