c++程序int型直接转换成float型可以这样转吗?
inta=6;intb=5;floatc=flaot(a)/float(b);这样出来的c值能出现小数吗?...
int a=6;
int b=5;
float c = flaot(a)/float(b);
这样出来的c值 能出现小数吗? 展开
int b=5;
float c = flaot(a)/float(b);
这样出来的c值 能出现小数吗? 展开
2个回答
展开全部
直接用(int)后接需要转换的变量,但是需要强调,转换方式为去掉二进制数小数点后部分的数字!
具体如下:
说明:图中数字都是以二进制方式存储的,所以x=1011.0011 0011 0011 0011......B
强制转换后,去掉小数点后部分数字,所以y=11D;
所以x-y=0.0011 0011 0011 0011.......B =0.1999999......D
所以100(x-y)=19.99999.......D
强制转换后只去掉小数点后部分的数字,所以z=19.
展开全部
注意拼写- -
LZ给出的代码并不是直接的转换,而是float的构造函数形式的初始化。当然,中间经过了转换,和以下的显式类型转换作用相同,都可以达到LZ的目的。
典型的C风格转换为:
float c = (float)a /(float)b;;
典型的C++风格转换为:
float c = static_cast<float>(a) / static_cast<float>(b);;
前者和C语言兼容(注意LZ的版本不兼容);后者虽然罗嗦,不过清楚,容易通过查找关键字找到转换处。
当然,由于内置的除法(built-in operator/)对于只要有浮点数参加的运算,会把所有的操作数都转化为浮点数,所以这样就可以了:
float c = (float)a / b;;
float c = static_cast<float>(a) / b;。
----
另外 wolinxuebin 错误。c是float类型,不表示后面的operator/就是浮点除法,两者无关。
而且, c = (a * 1.0) / (b * 1.0) 不保险,虽然很少有编译器会死脑筋到不把*1.0优化掉,但是万一没有优化,效率会大大降低(尤其是对于没有FPU的机器)。就算这样使用,直接 c = a * 1.0 / b 就可以了。
====
[原创回答团]
LZ给出的代码并不是直接的转换,而是float的构造函数形式的初始化。当然,中间经过了转换,和以下的显式类型转换作用相同,都可以达到LZ的目的。
典型的C风格转换为:
float c = (float)a /(float)b;;
典型的C++风格转换为:
float c = static_cast<float>(a) / static_cast<float>(b);;
前者和C语言兼容(注意LZ的版本不兼容);后者虽然罗嗦,不过清楚,容易通过查找关键字找到转换处。
当然,由于内置的除法(built-in operator/)对于只要有浮点数参加的运算,会把所有的操作数都转化为浮点数,所以这样就可以了:
float c = (float)a / b;;
float c = static_cast<float>(a) / b;。
----
另外 wolinxuebin 错误。c是float类型,不表示后面的operator/就是浮点除法,两者无关。
而且, c = (a * 1.0) / (b * 1.0) 不保险,虽然很少有编译器会死脑筋到不把*1.0优化掉,但是万一没有优化,效率会大大降低(尤其是对于没有FPU的机器)。就算这样使用,直接 c = a * 1.0 / b 就可以了。
====
[原创回答团]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询