首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【小雨学编程之C#】18 数据类型转换,为啥要转换?

上节内容中,我们利用用户输入做了一个控制台应用的简易加法的程序,在实现功能的过程中,出现了一个问题,就是控制台应用程序中,当我们调用读取用户输入指令的时候,无论用户输入什么,都默认成字符串,但是我们在用户输入内容后,要进行计算,显然用户输入后我们得到的数据类型和我们计算需要的数据类型不同,从而需要我们在计算之前,将用户输入的内容转化成我们需要的数据类型。

本节,我们具体谈谈,为啥会出现这种情况。

要解释整个问题,我们首先就要从变量的产生说起。

在程序中我们之所以使用变量是因为,实际代码编写过程中,我们会操作很多内容,可能操作数字,可能操作字符,由于操作的内容过多致使我们分不清到底应当使用谁,或者在实际运算过程中,操作的一个数字却和另一个运算结果相同从而导致使用冲突。

所以,我们在使用具体数据的时候,先声明一个变量,用这个变量代理对应具体的数据,那么我们操作这个代理也就是在操作对应的数据。

变量有体积区别:

那么在声明变量的时候就需要首先解决一个使用空间的问题,比如我们买菜的时候,装鸡蛋的容器就和装西瓜的容器的大小是不一样的。

那么我们声明变量的时候,就需要先告诉系统,我需要一个多大的空间来装对应变量所代理的数据。

为了使用方便,C#已经给我们定义好了数据类型的大小。

比如int类型代表了-2147483648到2148483647之间的整数

而long类型代表了-9223372036854775808到9223372036854775807之间的整数

int和long类型都代表了整数类型,但是从代表的整数范围我们就可以看到,明显long类型需要的空间大于int类型的空间。

但是程序不知道我们在使用对应数据类型的时候会向里面存储多大的数,所以在初始分配对应数据类型的时候,直接将对应类型所代表的最大空间分配给我们,比如:

我们用int来买菜时候,int最大是四个盒子,但是我们只用它装一个鸡蛋,一个盒子就够用了,但是系统分配的时候,不知道我们究竟要装几个鸡蛋,只知道我们请求int,所以直接给了我们int代表的最大的范围四个盒子。所以我们需要用四个盒子装一个鸡蛋。

变量有存储状态区别:

但是虽然变量是代理对应的数据的,但是不同的数据存储方式又是不同的。

比如我们知道int和long是用来存储数字的,存储数字就像向篮子中放鸡蛋。篮子是有固定大小的,我们只能放入固定数量的鸡蛋。

但是我们知道string是用来存储字符串的,数字可以规定大小,但是一个字符串中究竟有多少个字符我们是不知道的,所以系统存储字符串,就像放龙形风筝。

我们知道,龙形风筝的身体是一节一节的,想要加长身体直接在风筝的尾部直接添加一节即可,这就如同存储字符串的方式一样。

为啥出现了类型转换呢?

类型转换情景1:在运算的时候操作的数据类型需要相同

比方说我们计算1+1,这时候我们知道我们可以用int类型的变量来存储1,1+1=2,这里的2也在int范围内,所以我们不用去管这样的运算的数据类型范围。

但是我们知道int的最大取值是2148483647,如果我们用int计算1+2148483648的话,结果怎么办呢?

这时候,很明显2148483648超出int的表示范围,我们需要用long来存储2148483648。

但是我们知道加法是个合并的过程,那么我们是将int合并到long中,还是将long合并到int中呢?

这就如同int代表4个盒子,里面有一个鸡蛋,而long代表20个盒子,里面有五个鸡蛋。我们怎么将long合并到int中?

那么这种情况怎么办呢,这就需要我们用更大的数据类型去计算这个运算需求,否则,计算机会将我们的鸡蛋弄丢的!

所以此时,计算过程中,系统会将int偷偷的转换成long,然后两个long进行计算。

类型转换情景2:特殊原因导致的不同类型数据需要进行运算

对于操作的数据类型需要相同,这个好理解,比如int类型就不能和string类型做运算,我们看看鸡蛋和风筝咋直接做四则运算嘛……

但是,就如同我们之前的例子中,我们读取的用户输入就是string类型,我们还想实现加法的运算,这样的话,就迫使我们想办法,让int和string进行相加。

这时就需要数据类型转换,我们将string类型中包含的数据提取出来,变成int类型,然后再和int类型相加。

综上就是为啥需要数据类型转换!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210305A0F8SF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券