一步一步学习C#语言【类型转换】

  • 类型转换的概念

    所有的数据在计算机内存中都是由一系列的位组成,即0和1组成。不同的类型用不同的位模式来存储。

    类型转换即是一系列位从一种类型的变量到另一种类型的变量中,它们占用的存储空间可能不相同,目标类型可能能存储下所有源数据,结果可能会得到不期望值。

    类型转换有两种形式:隐式转换和显式转换。

  • 隐式转换

    隐式转换不需要做任何动作,也不需要编写任何代码来实现。

    即使两个变量存储信息完全相同,使用不同类型来解释他们时,方式也是不同的。

    简单类型只有bool类型和string类型没有隐式转换。

    隐式转换规则:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可进行隐式转换。
    下图为数值类型隐式转换表:

    类型 目标
    sbyte short、int、long、float、double、decimal
    byte short、ushort、int、uint、long、ulong、float、double、decimal
    short int、long、float、double、decimal
    ushort int、uint、long、ulong、float、double、decimal
    int  long、float、double、decimal
    uint long、ulong、float、double、decimal
    long float、double、decimal
    ulong float、double、decimal
    float double
    char ushort、int、uint、long、ulong、float、double、decimal
  • 显式转换

    显式转换是强制数值从一种数据类型转换成另一种数据类型。

    语法:    <(destinationType)sourceVar>

    彼此之间几乎没有什么关系的类型或根本没有关系的类型,不能进行强制转换。

    示例:    byte destinationVar;

    short sourceVar = 281;

    destinationVar = (byte)sourceVar;

    当显式把一种数据类型转换成另一种数据类型,可能会造成数据溢出或丢失。

    可以使用checked和unchecked关键字检查表达式是否溢出。

    示例:    byte destinationVar;

    short sourceVar = 281;

    destinationVar = checked((byte)sourceVar);

    执行上述代码,程序将崩溃。

  • 使用Convert命令进行显式转换

    使用Convert命令进行显式转换时,总是要进行溢出检查,checked和unchecked关键字以及项目属性设置不起作用。

  • 命令 结果
    Convert.ToByte(val) val转换为byte
    Convert.ToSByte(val) val转换为sbyte
    Convert.ToInt16(val) val转换为short
    Convert.ToUInt16(val) val转换为ushort
    Convert.ToInt32(val) val转换为int
    Convert.ToUInt32(val) val转换为uint
    Convert.ToInt64(val) val转换为long
    Convert.ToUInt64(val) val转换为ulong
    Convert.ToSingle(val) val转换为float
    Convert.ToDouble(val) val转换为double
    Convert.ToDecimal(val) val转换为decimal
    Convert.ToChar(val) val转换为char
    Convert.ToBoolean(val) val转换为bool
    Convert.ToString(val) val转换为string
  • 数据类型转换示例
  • using System;
    class program
    {
        static void Main(string[] args)
        {
            short shortResult, shortVal = 4;
            int integerVal = 67;
            long longResult;
            float floatVal = 10.5F;
            double doubleResult, doubleVal = 99.999;
            string stringResult, stringVal = "17";
            bool boolVal = true;
            
            Console.WriteLine("Variable Conversion Examples\n");
            
            doubleResult = floatVal * shortVal;
            Console.WriteLine("Implicit, -> double: {0} * {1} -> {2}", floatVal, shortVal, doubleResult);
            
            shortResult = (short)floatVal;
            Console.WriteLine("Explicit, -> short:  {0} -> {1}", floatVal, shortResult);
            
            stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal);
            Console.WriteLine("Explicit, -> string: \"{0}\" + \"{1}\" -> {2}", boolVal, doubleVal, stringResult);
            
            longResult = integerVal + Convert.ToInt64(doubleVal);
            Console.WriteLine("Mixed,    -> long:   {0} + {1} -> {2}", integerVal, doubleVal, longResult);
        }
    }

结果显示:

时间: 2024-08-04 09:57:31

一步一步学习C#语言【类型转换】的相关文章

【转】朱兆祺带你一步一步学习嵌入式(连载)

原文网址:http://bbs.elecfans.com/jishu_357014_2_1.html#comment_top  从最初涉及嵌入式Linux开始到现在,深深的知道嵌入式的每一步学习都是举步维艰.从去年11月份开始,我就着手整理各种学习资料,希望推动嵌入式学习的前进贡献自己微不足道的一份力量.从去年到现在,将C语言的学习经验整理成<攻破C语言笔试与机试陷阱及难点>(现在仍在更新),这份资料已经在电子发烧友论坛的单片机论坛连载(http://bbs.elecfans.com/jish

一步一步学习Swift之(一):关于swift与开发环境配置

一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣. 4.Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发. 5.Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进.

一步一步学习androidNDK编程(java给c传递数据)

这篇已经是"一步一步学习androidNDK编程"的第四篇了,在这篇中,我们将会在java中传递代码给c代码. 首先,我们新建一个android工程"ndkdata", 第一步: 同样的首先声明native方法,如下: public native int add(int a,int b); public native String helloSir(String name); public native int[] intMethod(int[] intArray)

一步一步学习Vue(十一)

本篇继续学习vuex,还是以实例为主:我们以一步一步学Vue(四)中讲述的例子为基础,对其改造,基于vuex重构一遍,这是原始的代码: todolist.js ; (function () { var list = []; var Todo = (function () { var id = 1; return function (title, desc) { this.title = title; this.desc = desc; this.id = id++; } })(); /** *

一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

这两天加班,不能兼顾博客的更新,请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容,而我们又想像数据库那样能直接体现在查询中,这里就是我们所说的增量索引.对于这样的需求我们怎么来实现呢?lucene内部是没有提供这种增量索引的实现的: 这里我们一般可能会想到,将之前的索引全部删除,然后进行索引的重建.对于这种做法,如果数据源的条数不是特别大的情况下倒还可以,如果数据源的条数特别大的话,势必会造成查询数据耗时,同时索引的构建也是比较耗时的,几相叠加,势必可能造成查询的时候数据缺失的情况

一步一步跟我学习lucene(9)---lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了:我们在用百度谷歌等搜索引擎的时候经常会看到按键放下的时候直接会提示用户是否想搜索某些相关的内容,恰好lucene在开发的时候想到了这一点,lucene提供的suggest包正是用来解决上述问题的. suggest包联想词相关介绍 suggest包提供了lucene的自动补全或者拼写检查的支持: 拼写检查相关的类在org.apache.

一步一步学习IdentityServer3 (1)

学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自由定制目前也在学习中. 网络飞速发展的今天,庞大的数据,庞大的用户,庞大的业务,都需要登录的支撑,登录授权完全看作一个单独的一门技术,Web端需要登录,App端需要登录,Api需要授权访问等等,除此以外大型业务系统,子系统之间其实也需要这样一个登陆授权,所以,登录不再是单一的一个功能点了,简单的查询

一步一步学习SignalR进行实时通信_8_案例2

原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建立DrawingHub 页面 javascript 实现效果 结束语 参考文献 前言 这讲分析一个案例,在一个画板上画画实时在其他客户端上显示. 配置Hub 在Startup中进行配置: public void Configuration(IAppBuilder app) { app.MapSign

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt