我正在查看一个 c++ 代码,我发现如下语句
BS_Id1 = (1./2) * BS_Id2;
我还没有访问所有库的权限。关于这个“./”的可能解释有什么想法吗?
我正在查看一个 c++ 代码,我发现如下语句
BS_Id1 = (1./2) * BS_Id2;
我还没有访问所有库的权限。关于这个“./”的可能解释有什么想法吗?
它不是运营商。它是double
文字1.0
除以 2。如果小数为零,则可以省略它们,而只有小数点。
写作1.
是一种将 1 表示为浮点double
而不是整数的方式。因此,在这种情况下,期间不充当运营商。
您需要这样做,因为 1 / 2 是在整数算术中进行的;因此,将被截断为零。
在将至少一个文字提升为浮点时,操作以浮点进行;所以结果将是 0.5。
它不是运营商。1.
这是和之间的划分2
。
点使编译器将1
视为 adouble
而不是 a int
(1
被解释为),因此结果不是两个int
s 之间的欧几里得除法的商。
在这里,1./2
yield 0.5
, while1/2
本来应该yield 0
。
它不是操作员;这.
是前一个令牌的一部分:
1. / 2
数字文字末尾的A.
表示它是浮点数(类型double
),而不是整数;所以这意味着表达式使用浮点除法来给出0.5
type的结果double
。没有它,整数除法将给出结果为零,类型为int
。
无论如何,如果(我猜)两个变量都是整数,则表达式几乎可以肯定更好地写成
BS_Id1 = BS_Id2 / 2;
如果实际上需要浮点运算,那么这些中的任何一个都不会那么混乱:
BS_Id1 = BS_Id2 / 2.0;
BS_Id1 = BS_Id2 * 0.5;
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
看这里
[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。” 在令牌中,而不是“./”