C++ 代码中的奇怪运算符
strange operator in c++ code
我正在查看一个 c++ 代码,我发现如下语句
BS_Id1 = (1./2) * BS_Id2;
我还无法访问所有图书馆。关于这个"./"的可能解释是什么的任何想法?
它不是运算符。 它是double
文字1.0
除以 2。如果小数为零,则可以省略它们,并且只有小数点。
编写1.
是一种将 1 表示为浮点double
而不是整数的方法。因此,在这种情况下,周期不充当运算符。
你需要这样做,因为1/2是在整数算术中执行的;因此,将被截断为零。
在将至少一个文本提升为浮点数时,操作在浮点中执行;因此结果将为 0.5。
它不是运算符。这是1.
和2
之间的划分。
点使编译器将1
视为double
而不是int
(1
被解释为),因此结果不是两个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
相关文章:
- 为什么模数运算符不适用于该代码
- 逻辑运算符上出现错误代码 a')'
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- std::string == 运算符在代码中不起作用
- 将 c++ 代码转换为 python,使用运算符?
- 为什么无法覆盖涉及第三方代码的模板类的运算符<<?
- 重载 <= 运算符,但程序以退出代码 -1073741571 (0xC00000FD) 结尾
- 如何翻译这个给定代码中的 ::* 运算符和member_fn?
- 代码块编译错误与运算符<<不匹配
- 为多个签名使用相同的代码重载赋值运算符?
- 赋值运算符在我制作类模板时使代码崩溃
- 在使用具有相等运算符定义的抽象类时,如何定义父类以减少代码重复?
- 删除运算符如何在我的代码中工作
- 在混合 c 和 c++ 代码中使用运算符 new
- 任何机构都可以在运算符重载中解释这行代码
- 没有运算符"[]"匹配这些操作数/没有模板化代码
- 试图重写代码以包括模量运算符
- 重载新运算符 - 此代码不应产生错误
- Visual studio:E0349 没有运算符<<匹配这些操作数(但代码中没有字符串)
- C++类型转换运算符代码,在 Visual Studio 2012 中无法编译,但在 Visual Studio 2005 中工作正常