2012-04-19 80 views
1

这可能是非常基本的,但我很好奇原因是什么。什么决定将用于存储临时值的数据类型?

当与不同类型的操作,如乘法和除法与不同类型的数据处理(整型,浮点等)什么决定得到回升,其数据类型?

例如,如果我做到以下几点:

float a = 5/10; 

我会得到“0”结果,因为5和10被暂时储存在我们做的师一个int,然后我们把它在一个浮动。对?

但是,如果我们不是这样做:

float a = (float)5/10; 

我们得到0.5代替。

在这种情况下,在C中优先使用浮点数时,如何判断浮点数是多少?

+2

请指定您的编程语言。 – SpeedCrazy 2012-04-19 03:57:24

+0

它有什么区别?在那种情况下,它将如何在C中工作? – chikuba 2012-04-19 03:59:03

+1

@chikuba是的,它*确实有所作为。有些语言 - 就像*非常受欢迎的JavaScript一样 - 没有“整数”,例如(在JS中'5/10'的结果是'0.5')。请相应更新帖子/标题; -1是针对这样一个模糊的抽象问题,无法用更多细节来回答。 – 2012-04-19 04:09:18

回答

2

看看这个片段。

float a = 5/10; 

510被表示为默认的整数C(和Java和C++和Python 2.x的)。他们没有被指定以任何其他方式存储;也就是说,它们不匹配浮点类型的外观。整数除法会导致截断,所以您每次都会得到值0。

现在,关于第二个片段:

float a = (float)5/10; 

... C(或Java或C++或Python 2.x的),将它解释为:

float a = 5.0/10; 

由于浮点值的级别高于整数,它会将整数提升为浮点数。这被称为类型提升。你可以读一下here

1

编译器通常不会尝试“让你的意思”,因为这是他们无法得到它的权利每单次。

他们只是按照严格的规则来做你告诉他们的事情。

这里,规则是:用另一个整数除整数返回一个整数。因此,如果您想要浮点除法,只需分割浮点数。

相关问题