zoukankan      html  css  js  c++  java
  • 数据类型转换:1人民币+1美元=?

    数据类型转换是我们从小学就开始学习的内容,只不过在小学我们称为单位换算。比如一条狗加一匹马等于是多少呢?总不是两条狗或两匹马吧。我们需要把单位转为都可以计算的单位,比如动物。结果就是两只动物。这样的转换,我们称为数据类型转换。

    C#中数据类型转换又分为隐式转换和显式转换。隐式转换是默认的转换,而显式转换就是必须明确说明的转换。

    比如¥1+$1的问题,在国际贸易结算中,默认将人民币转换为美元,那计算的结果是¥1+$1=$1.14。但如果在国内贸易结算,就需要明确说明用什么货币基准来转换,如果转为人民币的话就是¥1+$1=8

    这两个案例都很明确的说明,在数值的计算过程中,需要单位统一,在软件的开发过程中叫做数据类型一致。

    C#中对数值类型的数据转换规定

    数据容量小的类型转换为数据类型大的类型,是隐式转换,其变量中存储的数据值不会受到任何影响和变化。

    数据容量大的类型转换为数据类型小的类型,是显式转换,如果远数据中存储的实际值大于目标类型能存储的值范围,则会发生值受损。显式转换又叫强制类型转换。

     

    Code

    上述代码首先将int的最大值保存在int类型的i中,又将i的值赋值给了long类型的l。由于long类型能存储的范围远远大于int,因此存放在long类型中的值不会受损。

    又将l存储的值赋值为i,虽然这个时候l中保存的具体值不超过int的范围,但long类型比int类型大(你可以想象long的盒子比int的盒子大,大盒子哪怕放了一个小东西,但大盒子所占据的空间还是比小盒子大),所以要求显式转换。不过由于具体存的值够int存储,所以值没有受到影响。

    最后一次,我们把long类型的最大值赋值为l,又把l赋值为iint显然没有足够的空间存储赋予的值,这个时候i中的值是多少呢?-1

    为什么是-1?我们来看以下的经典转换

    byte b = 200;
    = (byte)(b + 100);
    System.Console.WriteLine(b);

    第二行中100是字面量所以的整数的字面量默认是int类型。byte类型容量小于int类型,应此byteint的类型转换是将byte显式转换为int,然后两个int类型之和为int,将相加后的值赋值给byte类型的b,就必须要强制类型转换。

    得到的结果是44byte类型的最大值是255,并且从0开始存储。(b+100)超过byte最大值45。结果是44就说明当给予的值超过了当前类型能存储的范围,则C#默认从0重新开始存放值。

    b赋值写成以下格式,不需要显示的声明类型转换,因为+=是赋值运算符。

    byte b = 200;
    += 100;
    System.Console.WriteLine(b);
  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/shyleoking/p/1507614.html
Copyright © 2011-2022 走看看