浅谈C#学习心得——数据类型

曾经读过的一本的技术书里是这样写道的:

"  面向对象编程吸取了结构化编程的精华,并将它和一些新概念结合在一起,由此得到一个不同的、更好的组织程序方法。大多数情况下,程序有两种组织方法:以代码(执行操作的对象)为中心或者以数据(受到影响的对象)为中心。只使用结构化方法进行编程时,程序一般以代码为中心来组织。这种方法可以认为是“代码作用于数据”。

面向对象程序使用的是另一种方法,它们以数据为中心组织程序,其关键原理体现在“数据控制对代码的访问”。在面向对象语言中,定义了数据和作用于该数据的相应代码,因此数据类型用于准确定义应用于这些数据的操作。 "

——摘自《C#4.0 完全参考手册》(美)Herbert Schildt著

C#是一种强类型语言,所有的操作都要经过编译器的类型检查,非法操作将不能通过编译,这样做有助于防止出现错误,增强了程序的可靠性。在C#中,所有的变量、表达式和值都是有其类型。

C#把数据类型分为两种:值类型和引用类型  。

两种类型的区别在于变量保存的内容。对于值类型,变量保存的是实际值,而对于引用类型,则是保存的为值的引用。

在C#中,所有的数据类型都以与平台无关的方式定义,以备将来C#和.Net迁移到其他平台上

1、值类型:C#主要包括13种值类型,通常称他们为简单类型或者基本类型。

1)整型:有8个预定义整形类型。  如下表:

名称 CTS类型 说明 范围
sbyte System.SByte 8位有符号的整数 -128~127(-2^7~2^7-1)
short System.Int16 16位有符号短整数 -32768~32767(-2^15~2^15-1)
int System.Int32 32位有符号的整数 -2147483648~2147483647(-2^31~2^31-1)
long System.Int64 64位有符号长整型 -9223372036854775808~9223372036854775807 (-2^64~2^64-1)
byte System.Byte 8位无符号整形 0~255(0~2^8-1)
ushort System.UInt16 16位无符号短整型 0~65535(0~2^16)
uint System.UInt32 32位无符号整型 0~4294967295(0~2^32-1)
ulong System.UInt64 64位无符号长整型 0~18446744073709551615(0~2^64-1)

C#定义了各种整型的有符号形式和无符号形式。有符号整数和无符号整数的不同之处在于对整数高阶位的处理方式。对于有符号整数,编译器将产生代码,把整数的高阶位作为一个符号位,为0时表示正直,为1时表示负值。

2)浮点类型:分为单精度和双精度数值。如下表:

名称 CTS类型 说明 位数 范围
float System.Single 32位单精度浮点数 7 1.5E-45~3.4E+38
double System.Double 64位双精度浮点数 15/16 5E-324~1.7E+308

如果在代码中对某个非整数值硬编码,则编译器以便假定该变量是double,如果想指定该值为float,可以在其后加上字符F(或f)。例如:  float  f=12.5F

3)decimal类型:表示精度更高的浮点数,如下表:

名称 CTS类型 说明 位数 范围
decimal System.Decimal 128位高精度十进制数表示 28 1E-28~7.9E+28

这种类型多用于财务计算,不是基本类型,所以在计算式使用该类型会有性能损失。

如果要把数字制定为decimal类型,可以在数字后面加上字符M(或m)。例如:decimal d=12.60M

4)bool类型:用于包含布尔值true或false,如下表:

名称 CTS类型 说明 位数
bool System.Boolean 表示true或false NA true或false

注意:bool值和整数不能互相隐式转换,如果变量(或函数的返回类型)声明为bool类型,就只能使用值true或false。如果试图使用0表示false,非0值表示true,就会出错。 5)字符类型:为了保存单个字符值,如下表:

名称 CTS类型
char System.Char 表示一个16位的(Unicode)字符

注意:char类型的字面量是用单引号括起来,如果把字符放在双引号中,编译器会把它看作字符串,从而产生错误。

除了char表示字符字面量外,还可以用4位十六进制的Unicode值,带有数据类型转换的整数值或十六进制数表示它们。它们还可以用转义序列表示。

6)C#还定义了其他三种类别的值类型:枚举(enum)、结构(struct)和可空类型。

2、引用类型:C#支持两种预定义引用类型,如下表:

名称 CTS类型 说明
object System.Object 根类型,CTS中的其他类型都是从它派生而来的(包括值类型)
string System.String Unicode字符串

1)object类型:在C#中,object类型就是最终的父类型,所有内置类型和用户定义的类型都从它派生而来。

2)string类型:

虽然string类型的赋值更像值类型的赋值,但是string是一个引用类型。

string与引用类型有一些区别如:字符串是不可改变的。修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串不发生任何变化。

字符串字面量放在双引号中。

时间: 2024-10-14 00:33:36

浅谈C#学习心得——数据类型的相关文章

1 浅谈c#学习心得之一:什么是c#?

什么是c#? 令我尴尬的c#! 说到c#,不得不说说一件令我尴尬的事,那就是c#怎么读?朋友们不要见笑,初次接触c#时,我把c#读作:c井,因为“#”和“井”很像,是不是很令人尴尬.当然,我认为只不过是一个美丽的错误,作为新手的朋友们,可能都会犯这样的错误.我的朋友直接指出了我的错误,虽然有点尴尬,但还是很感激他的好心,至少那以后我知道了怎么去读.当然读作c井,并不是什么大错,就像一个人名一样,一个代号而已. 但是我还是会告诉朋友们,专业的叫法:c sharp(#:的英文名称).我也极力推荐朋友

【转载】浅谈深度学习(Deep Learning)的基本思想和方法

浅谈深度学习(Deep Learning)的基本思想和方法 分类: 机器学习 信息抽取 Deep Learning2013-01-07 22:18 25010人阅读 评论(11) 收藏 举报 深度学习(Deep Learning),又叫Unsupervised Feature Learning或者Feature Learning,是目前非常热的一个研究主题. 本文将主要介绍Deep Learning的基本思想和常用的方法. 一. 什么是Deep Learning? 实际生活中,人们为了解决一个问

浅谈深度学习中潜藏的稀疏表达

浅谈深度学习中潜藏的稀疏表达 “王杨卢骆当时体,轻薄为文哂未休. 尔曹身与名俱灭,不废江河万古流.” — 唐 杜甫<戏为六绝句>(其二) [不要为我为啥放这首在开头,千人千面千理解吧] 深度学习:概述和一孔之见 深度学习(DL),或说深度神经网络(DNN), 作为传统机器学习中神经网络(NN).感知机(perceptron)模型的扩展延伸,正掀起铺天盖地的热潮.DNN火箭般的研究速度,在短短数年内带来了能“读懂”照片内容的图像识别系统,能和人对话到毫无PS痕迹的语音助手,能击败围棋世界冠军.引

浅谈流形学习

转载自:http://blog.pluskid.org/?p=533 总觉得即使是“浅谈”两个字,还是让这个标题有些过大了,更何况我自己也才刚刚接触这么一个领域.不过懒得想其他标题了,想起来要扯一下这个话题,也是因为和朋友聊起我自己最近在做的方向.Manifold Learning 或者仅仅 Manifold 本身通常就听起来颇有些深奥的感觉,不过如果并不是想要进行严格的理论推导的话,也可以从许多直观的例子得到一些感性的认识,正好我也就借这个机会来简单地谈一下这个话题吧,或者说至少是我到目前为止

浅谈流形学习(转)

http://blog.pluskid.org/?p=533 总觉得即使是“浅谈”两个字,还是让这个标题有些过大了,更何况我自己也才刚刚接触这么一个领域.不过懒得想其他标题了,想起来要扯一下这个话题,也是因为和朋友聊起我自己最近在做的方向.Manifold Learning 或者仅仅 Manifold 本身通常就听起来颇有些深奥的感觉,不过如果并不是想要进行严格的理论推导的话,也可以从许多直观的例子得到一些感性的认识,正好我也就借这个机会来简单地谈一下这个话题吧,或者说至少是我到目前为止对这它的

浅谈深度学习和本体间的关系

在一次会议上得到了这样一个观点说深度学习和本体是同一个方向的两条不同的路径.但是觉得这个两个东西是完全不相关的东东么怎么能扯到一起去呢?后来读了一些语义角色标注的文章发现这种观点确实有些意思.本文结合自己一些对深度学习极为浅显的了解和对本体.机器学习的粗浅理解浅谈一下深度学习和本体的关系. 在这里先要谈一下分类问题如羊是属于动物的,小明是属于人的等等.分类问题在人工智能领域一直占有极重要的地位.那么从统计角度的机器学习是怎么分类呢?大部分的分类器过程都是先找到这个实例的特征,如我对一句话:我爱北

浅谈java学习

本科上学的时候就学过两个学期的java,那时候学到的都谈不上基础,只是模糊知道一些语法和编程规则,第一个学期学习java,因为有之前c语言60%挂科率的心理阴影,对学习计算机编程语言在心理上是抗拒的,所以导致了当时老师念课本我听课本的僵局:第二个学期学习java,老师为了提高我们的编程能力,直接机房上课,一个学期跟着老师一行一行的敲代码,写了一个推箱子的游戏,说成复制更合适,因为完全没有自己的思想,就想机械工人一样只是照搬照抄,但好处还是有的,最起码知道该怎么操作eclipse.进入研究生学习阶

浅谈流形学习(Manifold Learning)

Machine Learning 虽然名字里带了 Learning 一个词,让人乍一看觉得和 Intelligence 相比不过是换了个说法而已,然而事实上这里的 Learning 的意义要朴素得多.我们来看一看 Machine Learning 的典型的流程就知道了,其实有时候觉得和应用数学或者更通俗的数学建模有些类似,通常我们会有需要分析或者处理的数据,根据一些经验和一些假设,我们可以构建一个模型,这个模型会有一些参数(即使是非参数化方法,也是可以类似地看待的),根据数据来求解模型参数的过程

Linux新手必看:浅谈如何学习linux

本文在Creative Commons许可证下发布 一.起步 首先,应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix问题1:版本的选择 北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术最先进的,linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举.原则是:我们没有必要把时间浪费在"装系统"上而应集中精力学习最有用的东