c#数据类型
一、C#中的变量和常量
C#中用于定义常量的方式有两种一个使用const关键字,一个是用readonly关键字。使用const定义的常量叫静态常量(compile-time constant),用readonly定义的常量叫动态常量(runtime constant)。常量定义 public const float PI=3.14159f; 常量PI对于所有的类对象而言都是一致的,要访问该字段可以直接用格式:类.PI进行取值,不需要实例化,类似于一个类的静态字段。而动态常量的定义为 public readonly float NUM,变量NUM可以看做一个动态的常量,可以在类的定义字段赋值或者在类的构造函数函数中赋值。比如可以定义:public readonly float NUM = 20.2F。
二、c#变量数据类型
变量的数据类型包括预定义的数据类型和自定义的数据类型,自定义的数据类型包括数组、枚举、结构和类,而预定义的数据类型如:
类型 |
描述 |
范围/精度 |
例子 |
||
object |
所有其它类型的最根本的基础类型 |
object o = null; |
|||
string |
字符串类型,一个字符串是一个Unicode字符序列 |
string s= "Hello"; |
|||
sbyte |
8-bit 有符号整数类型 |
–128...127 |
sbyte val = 12; |
||
short |
16-bit有符号整数类型 |
–32,768...32,767 |
short val = 12; |
||
int |
32-bit有符号整数类型 |
–2,147,483,648...2,147,483,647 |
int val = 12; |
||
long |
64-bit有符号整数类型 |
–9,223,372,036,854,775,808 ...9,223,372,036,854,775,807 |
long val1 = 12; long val2 = 34L; |
||
byte |
8-bit无符号整数类型 |
0...255 |
byte val1 = 12; byte val2 = 34U; |
||
ushort |
16-bit无符号整数类型 |
0...65,535 |
ushort val1 = 12; ushort val2 = 34U; |
||
uint |
32-bit无符号整数类型 |
0...4,294,967,295 |
uint val1 = 12; uint val2 = 34U; |
||
ulong |
64-bit无符号整数类型 |
0...18,446,744,073,709,551,615 |
ulong val1 = 12; ulong val2 = 34U; ulong val3 = 56L; ulong val4 = 78UL; |
||
float |
单精度浮点数类型 |
1.5 × 10−45 至 3.4 × 1038,7位精度 |
float val = 1.23F; |
||
double |
双精度浮点数类型 |
5.0 × 10−324 至1.7 × 10308,15 位精度 |
double val1 = 1.23; double val2 = 4.56D; |
||
bool |
布尔类型类型; 一个布尔类型数据不是真就是假 |
true,false |
bool val1 = true; bool val2 = false; |
||
char |
字符类型; 一个字符数据是一个Unicode字符 |
char val = 'h'; |
|||
decimal |
精确十进制类型,有28个有效位 |
1.0 × 10−28 至7.9 × 1028,28 位精度 |
decimal val = 1.23M; |
double类型
double数据类型的位构成:
1bit(符号位) |
8bits(指数位) |
23bits(尾数位) |
Float表示一个有32位的浮点数,其中第一位为符号位,后面8位为幂指数,再其后23位为尾数部分。幂指数的范围为(2-127-2128),表示的数据范围为-3.40E+38 ~ +3.40E+38。而尾数为223=8388608,意味着最多可以有七位的有效位,所以表示float的精度为7位。
可以根据系统自动获取数据范围
float f = float.maxvalue;
float f = float.minvalue;
1bit(符号位) |
11bits(指数位) |
52bits(尾数位) |
Double表示一个64位的双精度数,其中第一位为符号位,后面11位为指数为,再其后为52位尾数部分。指数的范围为(2-1023-21024),表示的数据范围为-1.79E+308 ~ +1.79E+308,尾数为252 = 4503599627370496,意味着最多可以有十六位的有效位,所以表示double的精度为16位。
所以说浮点数的精度由尾数的位数决定,而范围由指数的位数决定。
Bool result = Float.IsNaN(0/0f) ;
判断result的结果是否为一个数字 NaN ( not a number)
Bool result = Float.IsInfinity(10.2f/0f); //判断是否为无穷大
Bool result = Float.IsNegativeInfinity(-20.0f/0); //判断是否为负无穷大
Bool result = Float.IsPositiveInfinity(20.0f/0); //判断是否为正无穷大
float数据类型
float类型数据的位构成:
Int数据类型
Int 赋值
long l = 200;
int i = l; //直接赋值,系统排出错误,因为l的取值范围要大于i的取值范围,所以需要显示的类型转换
int I = (int)l;
short s= 200;
int I = s; //直接赋值不会出错,系统可以将short类型的s转化为l,
因此将一个取值范围大的数据类型转化为一个取值范围较小的数据类型需要显式地转化,相反讲一个范围较小的数据类型转化为一个取值范围较大的数据系统可以隐式的进行转化。
获取Int数据类型的最大最小值
Int.maxvalue;
Int.minvalue;
Int.parse(“200”)数据转换,将字符串参数转化为整数,但是此种方式不是一种安全的数据转化方式。
如:int.parse(“12x”),系统肯定出错,因为不能成功将字符串"12x"转化为一个整数,在系统运行的时候一定会抛出Exception;但是Int还提供一种安全的转化方式,可以使用Int.tryparse(“sf”,out i)判断转化是否成功,如"sf"不能转化为一个整数,对于不成功的情况我们可以作出相应的处理。