etec 发表于 2024-10-20 11:01:44

不同类型变量之间相互赋值问题

本帖最后由 etec 于 2024-10-20 11:09 编辑

各位老师,想请教一个不同类型变量之间赋值,是否需要强制转换问题


变量定义:signed long int a,   float b,unsigned long int c;

   例如变量 b = 90000.0
   为了保证计算精度,程序中计算一些数据时会用浮点数计算,计算完后,在调用这个变量时,小数点后数据可以不用
   此时 将变量b 赋值给变量a ,变量b的小数点后数据不需要传递给变量a
   代码是用 a = b;还是用 a = (signed long int)b;


   例如变量 c = 90000
   为了提高计算精度会将变量c装换成浮点数去参与计算
   此时 将变量c 赋值给变量b ,
   代码是用 b = c;还是用 b = (float)c;

   变量c转换变量b后,精度是否会受影响。
   

晓飛飛 发表于 2024-10-20 11:18:38

大部分不同变量之间是可以直接赋值操作的,编译器会适配处理的。一般涉及到强制类型转换的场合主要有函数参数的类型不一致、指针类型不一致会导致出现直接的错误或编译报错。

远行的鹿 发表于 2024-10-20 15:12:07

分2种情况:自动转换和强制转换,否则编译器会报警告或错误。1.自动转换如图。①若参与运算量的类型不同,则先转换成同一类型,然后进行运算      ②转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算            a、若两种类型的字节数不同,转换成字节数高的类型            b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型      ③所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式,也要先转换成double型,再作运算.      ④char型和short型参与运算时,必须先转换成int型      ⑤在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。             如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。 2.强制类型转换      强制类型转换一般格式如下:            (类型名)(表达式)      这种强制类型转换操作并不改变操作数本身

soma 发表于 2024-10-20 15:14:57

远行的鹿 发表于 2024-10-20 15:12
分2种情况:自动转换和强制转换,否则编译器会报警告或错误。1.自动转换如图。①若参与运算量的类型不同, ...

这个真详细说明各种变量啊

远行的鹿 发表于 2024-10-20 15:15:52

推荐还是用强制转换,这样自己更清楚代码会怎么做,避免出现自己不想要的结果,减少程序bug。

邮箱 发表于 2024-10-20 19:42:40

远行的鹿 发表于 2024-10-20 15:12
分2种情况:自动转换和强制转换,否则编译器会报警告或错误。1.自动转换如图。①若参与运算量的类型不同, ...

{:4_250:}
页: [1]
查看完整版本: 不同类型变量之间相互赋值问题