c语言怎么把float转换为int计算 c语言把int转化为float会四舍五入么?
c语言把int转化为float会四舍五入么?
它只取整数部分。就是可能是1.999999999然后转换成int,也就是1,所以浮点数转换成int会失去精度。为了避免这种情况,建议如果想得到整数部分。可以用float b int a a a (B0.5),意思是四舍五入。如果写成ab,可能会出现0.99999999999被截断,A为0的情况。
C语言能自动转换的数据类型?
C语言中的自动类型转换
如果在同一个语句或表达式中使用了多种类型的变量和常量(混合类型),C会自动将它们转换成相同的类型。以下是自动类型转换的基本规则:
1.在表达式中,char和short的值,不管是有符号的还是无符号的,都会自动转换为int或无符号int(如果short的大小与int相同,则无符号short的表示范围大于int,这种情况下,无符号short转换为无符号int)。因为它们被转换成代表更大范围的类型,所以这种转换被称为 "推广与宣传。
2.将各种数据类型从高到低排序,即:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int和int。这里有一个小小的例外。如果long和int大小相同,那么无符号int的秩应该在long之上。Char和short没有出现在这个排名列表中,因为它们应该已经升级为int或unsigned int。
3.在任何涉及两种数据类型的操作中,级别较低的类型将被转换为级别较高的类型。
4.在赋值语句中,在将右边的值赋给左边的变量之前,应该将右边值的数据类型转换为左边变量的类型。也就是说,右边的值将被转换为左边变量的任何数据类型的值。此过程可能会导致右侧值的类型升级,也可能会导致其类型降级。所谓的 "降级 "意味着较高等级的类型被转换成较低等级的类型。
5.当作为参数传递给函数时,char和short将被转换为int,float将被转换为double。使用函数原型可以避免这种自动升级。
1.隐式转换
c在下面。:将在四种情况下被隐式转换。
1.在算术表达式中,低位类型可以转换为高位类型。
2.在赋值表达式中,右表达式的值自动隐式转换为左变量的类型并赋值给他。
3.当在函数调用中传递参数时,系统隐式地将实际参数转换为形参的类型,并将它们赋给形参。
4.当函数有返回值时,系统会隐式地将返回表达式类型转换为返回值类型,并将其赋给调用函数。
2.算术运算的隐式转换
在算术运算中,首先采用以下类型转换规则:
1.字符必须先转换成整数(C语言规定字符型数据和整数型数据可以通用)。
类型转换为int类型(两者都属于整型)。
3.浮点型数据在运算时总是转换成双精度型,以提高运算精度(都属于实型)。
其次,有以下规则。
对不同类型的数据进行操作时,应先转换成相同的数据类型,再进行操作。转换规则是从低电平转换到高电平。转换规则如下图所示,:。
上图的简图如下:
3.算术运算的例子
执行:x 100 # 39a # 39 1.5 * u f/# 39b # 39-s * 3。33866.88838683667
其中U为无符号,F为浮点,S为短整型,X为浮点型。公式中的右表达式处理如下:
1.首先用int替换#39a#39、#39b#39和s,把1.5和f转换成double类型。
2.计算100 #39a#39,因为#39a#39已经转换成int类型,所以这个运算的结果是197。
3.计算1.5 * U .由于1.5已经转换成double,U是无符号的,所以先把U转换成double,然后进行运算,运算结果是double。
4.计算197 1.5 * u,先把197转换成double(比如197.00…00),结果是double。
5.计算f/ #39b#39,F已经转换成double,而#39b#39已经转换成int,所以先把#39b#39转换成double,结果是double。
6.计算(197 1.5 * u) f/#39b#39,都是double,所以结果也是double。
7.要计算s * 3.1415926,先把S从int转换成double,再进行运算,结果是double。
8.最后,从前面的结果中减去,结果是双倍的。
9.最后,表达式的结果被转换成float并赋给x。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。