C# 基础知识系列- 1 数据类型

1c46fda205.html">C#的类型一般分为值类型引用类型两大类型。
值类型的实例存放在栈中,引用类型会在栈中放置一个指针指向堆中的某一块内容。
1c46fda205.html">C#为我们内置了几个数据类型供我们使用:

关键词简写 对应的类全称(点击可以查看对应的API) 值范围 说明
bool   System.Boolean   true、false   该类型只有两个值,用作判断,表示“是”、“否”  
sbyte   System.SByte   -128 ~ 127 (-27~27-1)   该类型在内存中使用8个bit进行存储,而且带有符号。
根据最高位作符号位,所以sbyte实际表示范围为 -128~127
 
byte   System.Byte   0~28-1   8位的无符号bit  
short   System.Int16   -215~215-1   short表示一个16位的短整形,其具体的值为-32768~32767  
ushort   System.UInt16   0~216-1   ushort表示无符号16位的短整型,具体的范围为0~65535  
int   System.Int32   -215~215-1   int是我们常用的一个数据类型,它的数据范围为: -2,147,483,648~ 2,147,483,647 。
可以看到,是-2亿到2亿,基本满足了数据需要。
 
uint   System.UInt32   0~232-1   uint 无符号整形,最大值比 int大一倍左右,但是没有负数。
如果在计算中能保证没有负值,可以使用。
并不推荐,因为在做减法的时候,更、容易溢出
 
long   System.Int64   -216~216-1   实际取值为-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807 。
long在内存中比int占用更多字节,长度为int的两倍。
所以能表达更多的数剧。在数据库中,经常被用来做大数据表的主键。
 
ulong   System.UInt64   0~264-1   64位无符号长整形,理同其他的无符号整形,在正整数中比long表达更多的数据。  
char   System.Char   utf-16   在.net 中char 表示 utf-16的编码单位,所以绝大多数的字符都可以用char表示,包括中文汉字。  
float   System.Single   -3.402823e38~3.402823e38   32位的单精度浮点型,也就是通常说的带小数点的数  
double   System.Double     64位双精度浮点型,比float能表示更多的小数位。
实际取值-1.79769313486232e308~1.79769313486232e308
 
decimal   System.Decimal     128位高精度浮点值。
常用于不能四舍五入,或者对小数点后数字要求很敏感的地方。
在128位中,一位是符号位(表示正负),96位是值本身(N),8位是比例因子(k)。
所以decimal实际值应该是 ±Nx10k,其中-28≤k≤0.其余位暂时没有使用
 
string   System.String   --   字符串变量,表示一组字符数组。字符串是不可变量。即字符串不能修改,任何针对字符串的修改都会生成一个新的字符串。  

另外的两个特殊类型:dynamic object。
其中 dynamic 表示动态类型,这是C#在4.0开始支持的,dynamic关键字声明该变量名是个动态变量。具体使用参照 Python,Js 之类的动态语言。但是dynamic声明的变量不支持添加属性,但这并不完全绝对,可以参照后续的动态篇会对这部分内容进行介绍。

object 所有类型的父类,C#所有类都是 object的子类。不过上表中介绍的直接父类是 ValueType(表示值类型),但是ValueType的父类仍然是object。

说明:
对于 double 和 float 因为存储数据方式的问题,都存在一个问题:对于 0 或者近0的值不能很好的表达。因为浮点型变量在内存中表示为 1/2n,所以都会存在一个+0和-0两个值。当 一个浮点型判断是不是等于0时,可以正常判断。但是一旦涉及到数学运算的结果与0进行比较的话就会出现问题,比如说 0.1+0.2 != 0.3 这个判断式是 true。所以标准的判断方式应该是 Math.Abs(0.1+0.2 - 0.3)< ? 这种方式,其中?表示系统接受的误差范围。
而decimal在这方面的准确度就比 double和float高很多。至少不会出现 0.1 + 0.2 != 0.3 这种问题。所以decimal一般用在金额计算这些地方。

类型转换

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzwyf.html