c ++代码中的奇怪运算符

时间:2013-09-17 14:46:57

标签: c++ operator-keyword

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

BS_Id1 = (1./2) * BS_Id2;

我还没有访问所有库。对于这个“./”?

的可能解释有什么想法

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

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

你需要这样做,因为1/2是用整数运算进行的;因此,将被截断为零。

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

答案 2 :(得分:1)

这不是运营商。它是1.2之间的一个分区。

点使编译器将1视为double而不是int1被解释为),因此结果不是商两个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”。是在一个代币,而不是“./”