我正在查看c ++代码,我发现如下语句
BS_Id1 = (1./2) * BS_Id2;
我还没有访问所有库。对于这个“./”?
的可能解释有什么想法答案 0 :(得分:12)
这不是运营商。它是double
文字1.0
除以2.如果小数为零,则可以省略它们,并且只有小数点。
答案 1 :(得分:3)
写1.
是一种将1表示为浮点double
而不是整数的方法。因此,在这种情况下,期间不是作为运营商。
你需要这样做,因为1/2是用整数运算进行的;因此,将被截断为零。
在将至少一个文字提升为浮点时,操作以浮点进行;所以结果将是0.5。
答案 2 :(得分:1)
这不是运营商。它是1.
和2
之间的一个分区。
点使编译器将1
视为double
而不是int
(1
被解释为),因此结果不是商两个int
之间的欧几里德分裂。
此处,1./2
会产生0.5
,而1/2
会产生0
。
答案 3 :(得分:1)
这不是运营商; .
是上一个标记的一部分:
1. / 2
数字文字末尾的.
表示它是浮点(类型double
),而不是整数;所以这意味着表达式使用浮点除法为结果0.5
提供类型double
。如果没有它,整数除法会将结果赋予零,类型为int
。
无论如何,如果(我猜)两个变量都是整数,那么表达式几乎肯定会更好地写成
BS_Id1 = BS_Id2 / 2;
如果实际需要浮点运算,那么其中任何一个都不会混淆:
BS_Id1 = BS_Id2 / 2.0;
BS_Id1 = BS_Id2 * 0.5;
答案 4 :(得分:0)
1.
是一个浮点字面值,它是double
,因为它没有后缀,因此表达式(1./2)
的这一部分可能会更加清晰:
(1.0/2)
但它们在功能上完全相同。如果我们从draft C++ standard部分2.14.4
浮动文字中查看浮动文字的语法,我们会看到以下内容:
fractional-constant:
digit-sequenceopt. digit-sequence
digit-sequence . <-- 1. fits this part of the grammar
答案 5 :(得分: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”。是在一个代币,而不是“./”