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

strange operator in c++ code

本文关键字:运算符 代码 C++      更新时间:2023-10-16

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

BS_Id1 = (1./2) * BS_Id2;

我还无法访问所有图书馆。关于这个"./"的可能解释是什么的任何想法?

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

编写1.是一种将 1 表示为浮点double而不是整数的方法。因此,在这种情况下,周期不充当运算符。

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

将至少一个文本提升为浮点数时,操作在浮点中执行;因此结果将为 0.5。

它不是运算符。这是1.2之间的划分。

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

在这里,1./2产生0.5,而1/2会产生0

它不是运算符;.是前一个标记的一部分:

1. / 2

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

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

BS_Id1 = BS_Id2 / 2;

如果确实需要浮点运算,那么以下任何一个都不会那么令人困惑:

BS_Id1 = BS_Id2 / 2.0;
BS_Id1 = BS_Id2 * 0.5;

看这里

[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."

在标记中,而不是"./"

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