3

我正在查看一个 c++ 代码,我发现如下语句

BS_Id1 = (1./2) * BS_Id2;

我还没有访问所有库的权限。关于这个“./”的可能解释有什么想法吗?

4

6 回答 6

12

它不是运营商。它是double文字1.0除以 2。如果小数为零,则可以省略它们,而只有小数点。

于 2013-09-17T14:48:59.830 回答
3

写作1.是一种将 1 表示为浮点double而不是整数的方式。因此,在这种情况下,期间不充当运营商。

您需要这样做,因为 1 / 2 是在整数算术中进行的;因此,将被截断为零。

在将至少一个文字提升为浮点时,操作以浮点进行;所以结果将是 0.5。

于 2013-09-17T14:49:08.210 回答
1

它不是运营商。1.这是和之间的划分2

点使编译器将1视为 adouble而不是 a int1被解释为),因此结果不是两个ints 之间的欧几里得除法的商。

在这里,1./2yield 0.5, while1/2本来应该yield 0

于 2013-09-17T14:49:50.793 回答
1

它不是操作员;这.是前一个令牌的一部分:

1. / 2

数字文字末尾的A.表示它是浮点数(类型double),而不是整数;所以这意味着表达式使用浮点除法来给出0.5type的结果double。没有它,整数除法将给出结果为零,类型为int

无论如何,如果(我猜)两个变量都是整数,则表达式几乎可以肯定更好地写成

BS_Id1 = BS_Id2 / 2;

如果实际上需要浮点运算,那么这些中的任何一个都不会那么混乱:

BS_Id1 = BS_Id2 / 2.0;
BS_Id1 = BS_Id2 * 0.5;
于 2013-09-17T14:53:18.357 回答
0

1.是一个浮点文字,double因为它没有后缀,所以这部分表达式(1./2)可能更清楚,如下所示:

(1.0/2)

但它们在功能上是相同的。如果我们从草案 C++ 标准部分2.14.4 浮动文字中查看浮动文字的语法,我们会看到以下内容:

fractional-constant:
  digit-sequenceopt. digit-sequence
  digit-sequence .                    <-- 1. fits this part of the grammar
于 2013-09-17T14:50:04.007 回答
0

看这里

[wolf@Targaryen]:~$ cat main.cpp 
#include <iostream>
using namespace std;

int main() {
  double x, y;  
  x = 1/2;
  y = 1./2;
  cout << x << endl;
  cout << y << endl;
}
[wolf@Targaryen]:~$ r
0
0.5
[wolf@Targaryen]:~$

“1。” 在令牌中,而不是“./”

于 2013-09-17T15:13:39.750 回答