“无论是什么类型,所有的数据都是一系列的位,即一系列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#入门(类型转换)的更多相关文章

  1. Mego(04) - Mego入门

    本教程演示创建一个简单的数据库访问及更新数据的示例以便于初步了解下Mego框架的使用. 文中使用Visual Studio 2017版本. 创建Visual Studio项目 创建一个名为 MegoS ...

  2. Ubuntu16.04小白入门分享之 玩转Ruby你需要安装什么软件(持续更新)

    Ubuntu提示功能很强大,一般如果你想安装什么软件,可以直接输入名字,然后会有提示,安装格式一般为: sudo apt install 名字 Ubuntu14.04/16.04命令行快速安装Ruby ...

  3. 记录21.08.04 — mybatis入门学习

    mybatis入门 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工 ...

  4. Ubuntu 16.04 LTS(入门一)国内快速更新软件源

    一.源文件位置 备份并替换/etc/apt/sources.list的源内容: 二.更改源文件内容 sudo gedit /etc/apt/sources.list deb http://mirror ...

  5. SpringMVC框架04——RESTful入门

    1.RESTful的基本概念 REST(Representational State Transfer)表述性状态转移,REST并不是一种创新技术,它指的是一组架构约束条件和原则,符合REST的约束条 ...

  6. 04 Python入门学习-流程控制(if else elif while for)

    一:流程控制if 语法一: if 条件: code1 code2 code3 ... age = 20 height = 170 weight = 60 sex = 'female' is_beaut ...

  7. 04.Javascript——入门一些方法记录之iterable

    遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...

  8. 04 . Python入门之条件语句

    一. Python条件语句 Python条件语句是通过一条或多条语句执行结果(True或False)来决定执行的代码块. 可以通过下图简单了解语句的执行过程 Python程序语言指定任何非0和非空(n ...

  9. 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 ...

  10. Ruby小白入门笔记之<个人记录档>

    书写缘由 快两年的JAVA开发,因为来到一家新公司,产品需要用Ruby开发,故此才有了这从头开始,一入编程深似海啊...... 因为入门时是JAVA,所以理念跟规范早已形成,故此感觉突然采用Ruby编 ...

随机推荐

  1. 学android: android-studio从main开始

    android-studio 创建hello world很容易,一路next创建blank activity,再接好手机或者avd(andorid virtual device)就好了.  但是对于我 ...

  2. (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...

  3. HTML meta 标签用法(转)

    meta主要为分HTTP标头信息(HTTP-EQUIV)和页面描述信息(NAME).标头信息包括文档类型.字符集.语言等浏览器正确显示网页的信息及处理动作:网页描述如内容的关键字.摘要.作者和定义ro ...

  4. Python requests 为pfsense 添加Routes

    # !/usr/bin/python 2 # -*- coding: utf-8 -*- __author__ = "Evilxr" import requests ips = o ...

  5. centos安装sublime

    在官网下载,tarball    下载链接        http://www.sublimetext.com/3 提示信息:  Ubuntu 64 bit - also available as a ...

  6. LeetCode-Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  7. POJ 3311 Hie with the Pie (状压DP)

    dp[i][j][k] i代表此层用的状态序号 j上一层用的状态序号 k是层数&1(滚动数组) 标准流程 先预处理出所有合法数据存在status里 然后独立处理第一层 然后根据前一层的max推 ...

  8. XMLHttpRequest

    XMLHttpRequest对象的方法 abort() 取消当前所发出的请求 getAllResponseHeaders() 取得所有的HTTP头信息 getResponseHeader() 取得一个 ...

  9. HTTP head 详解 (转)

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内 容请参考RFC2616.HTTP协议采用了请求/响应模型.客 ...

  10. mylistview 中item的子项的布局文件xml

    @Override public View getView(final int position, View view, ViewGroup parent) { System.out.println( ...