04-c#入门(类型转换)
“无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一句话总感觉理解起来不是很通俗,自己觉得这样理解可能会合适些:无论什么类型的数据,在计算机存储时都是0和1,而变量的意义,就是以不同的方式来解释这些数据,以达到满足程序应用、节约内存等需求。
换句话说:变量存在的意义,就是建立规(标)范(准)的数据存储方式。
- 隐式转换
类型转换分两种形式:隐式转换、显示转换。
隐式转换不需要单独的表达式,只需要把满足隐式转换条件的两个变量做相应的表达式操作即可,但隐式转换的结果可能并不是自己意料之中的:
ushort destinationVar;
char sourceVar = 'a';
destinationVar = sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);
上面的输出结果,sourceVar的是a,而destinationVar虽然=sourceVar,但输出的结果是97。可以看出,虽然两种数据类型满足隐式转换的条件(存储的值范围),但不同的表达类型决定了最终的结果也不一样。另外,和大多数编程一样,隐式转换时,只要类型A的取值范围比类型B的范围小,就可以隐藏转换为B。
- 显示转换
在显示转换中,可以使用强制转换和Convert。
强制转换只在某些情况下可以,可能应用的场景不太丰富,当然,这个的确要方便一些,在变量前加上类似 (byte) 的代码就可以了:
byte destinationVar;
short sourceVar = 281;
destinationVar = (byte)sourceVar;
Console.WriteLine("sourceVar: {0}", sourceVar);
Console.WriteLine("destinationVar: {0}\n",destinationVar);
这个例子比较有意思,输出的结果是:sourceVar: 281, destinationVar: 25; 为什么不是变更为255?这就回到开头提到的了,其实转换过程中,丢掉的是数据存储的二进制位:
在转换的过程中,会把超过取值范围(255二进制位)的那个1丢掉,保留其它的位,所以最终结果是25,而不是255,也不是281。
Convert转换应该是常用的方式,因为它始终会进行溢出检查。
- 溢出检查配置
有些东西虽然没什么用,但是我们应该知道,否则出问题的时候就不知道怎么解决了。配置:解决方案资源管理器 - 右键 - 属性 - 生成 - 高级 - 检查运算上溢/下溢:
当然,对于强制转换可能需要这个配置,但使用Convert转换时始终会进行溢出检查的,所以这个配置和checked/unchecked就不起作用了。
- 结语
每次一看见那些数据类型、表达式的列表表格就头疼,因为根本记不住。就像哪些类型可以怎么转换成其它的类型的表格一样,其实个人感觉大可不必去记住这些,在实际做项目的过程中,只要记得有这方面的功能就行了,具体用哪一个,可以再回过头来翻书或google。
应该掌握的是:记住存在隐式转换,但这种方式应该尽量少用吧。而显示转换,方便的就直接用(),当然,最可靠的应该是Convert,因为在转换时,Convert始终都会进行溢出检查。
至于这些区别,可能还要以后多用用才能感受出来。
04-c#入门(类型转换)的更多相关文章
- Mego(04) - Mego入门
本教程演示创建一个简单的数据库访问及更新数据的示例以便于初步了解下Mego框架的使用. 文中使用Visual Studio 2017版本. 创建Visual Studio项目 创建一个名为 MegoS ...
- Ubuntu16.04小白入门分享之 玩转Ruby你需要安装什么软件(持续更新)
Ubuntu提示功能很强大,一般如果你想安装什么软件,可以直接输入名字,然后会有提示,安装格式一般为: sudo apt install 名字 Ubuntu14.04/16.04命令行快速安装Ruby ...
- 记录21.08.04 — mybatis入门学习
mybatis入门 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工 ...
- Ubuntu 16.04 LTS(入门一)国内快速更新软件源
一.源文件位置 备份并替换/etc/apt/sources.list的源内容: 二.更改源文件内容 sudo gedit /etc/apt/sources.list deb http://mirror ...
- SpringMVC框架04——RESTful入门
1.RESTful的基本概念 REST(Representational State Transfer)表述性状态转移,REST并不是一种创新技术,它指的是一组架构约束条件和原则,符合REST的约束条 ...
- 04 Python入门学习-流程控制(if else elif while for)
一:流程控制if 语法一: if 条件: code1 code2 code3 ... age = 20 height = 170 weight = 60 sex = 'female' is_beaut ...
- 04.Javascript——入门一些方法记录之iterable
遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...
- 04 . Python入门之条件语句
一. Python条件语句 Python条件语句是通过一条或多条语句执行结果(True或False)来决定执行的代码块. 可以通过下图简单了解语句的执行过程 Python程序语言指定任何非0和非空(n ...
- Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04
Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...
- Ruby小白入门笔记之<个人记录档>
书写缘由 快两年的JAVA开发,因为来到一家新公司,产品需要用Ruby开发,故此才有了这从头开始,一入编程深似海啊...... 因为入门时是JAVA,所以理念跟规范早已形成,故此感觉突然采用Ruby编 ...
随机推荐
- SVN与git交互
操作的第一步,就是找到版本库,然后打开,有git的文件夹叫版本库 OrderManagement是版本库 第二步,查看日志,在版本库里内部,空白处右键,选择TortoiseGit--showlo ...
- Android——通讯录
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- ObjectOutputStream序列化问题
ObjectOutputStream序列化对象传输时,为了节省开销,会自动比较以前序列化过的对象,如果一致(指内存,不比较内容),则自动引用以前用过的对象,这就造成了传输到对方的对象总是第一次序列化的 ...
- esxi 升级
开启ssh esxcli software vib install -d="/vmfs/volumes/53034105-a8b88330-c096-40f2e993407b/update- ...
- Jquery cxColor 示例演示
今天第一次自己做调色板调用,看了半天官方的例子愣是没看懂,唉,码农老矣,尚能码否? 经过对官方下载的示例一删一浏览终于弄出来了,这么简单的东西,官方的Demo逼格也太高了 上代码: <!DOCT ...
- XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...
- oracle 职业学习指引
风哥 它是阿里巴巴造出的概念.其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机.Oracle数据库.EMC存储设备,代之以自己在开源软件基础上开发的系统. 思科.IBM.谷歌.高通.英特尔.苹果. ...
- Centos下安装和配置SVN
1.安装SVN服务 #检查现有版本 rpm -qa subversion #如果存储旧版本,卸载旧版本SVN yum remove subversion #安装SVN yum install subv ...
- An invalid character [32] was present in the Cookie value
系统安装Tomcat版本为:tomcat8,登录时报错"An invalid character [32] was present in the Cookie value" 处理方 ...
- KMPlayer 捆绑商业软件问题以及解决办法
Kmplayer 本来是很好的播放软件,支持的格式很多,特别我要在本地播放flash swf 就用它.昨天下载安装了他们推荐已久的更新之后,莫名帮我安装了几个软件,都是我不能选择的,例如Winzip. ...