【问题标题】:For multiplication and division in C++, what is the reasoning for using a ' ./ ' or ' .*' vs. a '/ ' or '*'?对于 C++ 中的乘法和除法,使用“./”或“.*”与“/”或“*”的原因是什么?
【发布时间】:2020-04-16 17:06:10
【问题描述】:

我正在通过一些 C++ 代码来确定它是如何运行的(我自己还不太了解该语言),我遇到了一些看起来像这样的行:

  bw = 2.*ti/3.;           rorq = ((bw/to)**(1./q));

代码使用.*ti 而不是*ti 有什么特别的原因吗?和变量有关系吗?

【问题讨论】:

  • 我建议不要通过 c++ code 来学习这门语言。尤其是带有变量名称的代码,如bwti。尝试一个好的c++ book
  • 虽然至少有一种语言我记不得了,它使用.* 进行元素乘法,但 C++ 没有这样的东西。
  • C++ 中没有运算符**。一个* 用于乘法,另一个用于取消引用。但是表达式(1./q)不是指针,所以这个表达式是无效的。
  • 我必须通过代码,不幸的是我没有时间正确学习c++。还不错,我一直在使用 cplusplus.com 解决我的大部分问题,并且效果很好,但我不知道 ./ vs. / 的原因,我也弄清楚了变量的含义所以这不是问题
  • 让我们添加一些空格来澄清表达式:bw = 2.0 * ti/3.0;“.”用数字 2 解析以表示浮点数。这一切都与解析表达式时的运算符优先级有关。同样,另一个表达式应该是(1.0 / q)。还要查一下整数除法和浮点除法的区别。

标签: c++ variables logic operators division


【解决方案1】:

首先,这不是有效的 C++ 代码:

rorq = ((bw/to)**(1./q));  

C++ 语言没有** 运算符。

在解析表达式时,有优先级的规则。这 '。'附在号码上。添加适当的空格:

bw = 2. * ti/3. ;
rorq = ((bw / to) ** (1. / q));  

为了避免歧义,大多数 C++ 程序员会在小数点后添加一个 0:

bw = 2.0 * ti / 3.0 ;
rorq = ((bw / to) ** (1.0 / q));  

“.0”通常用于强制将整数常量添加到浮点常量。也可以使用后缀“f”:

bw = 2f * ti / 3f ;
rorq = ((bw / to) ** (1f / q));  

【讨论】:

  • 2f 合法吗? 0x2f 怎么样?
  • 十六进制符号必须在前面有0x0x 更改了解析语法。所以,没有0x,数字是浮点数。对于0x,数字是十六进制。
  • 嗯,float f = 2f ;,我得到`错误:无法找到数字文字运算符'operator""f'。您的代码是否在没有警告/错误的情况下编译? (我:g++ -std=c++0x -O0 -g3 -Wall -c -fmessage-length=0 -fext-numeric-literals -MMD -MP -MF"cpp2.d" -MT"cpp2.o" - o "cpp2.o" "../cpp2.cpp", gc, 版本 9.3.0)
【解决方案2】:

这看起来一点也不像 C++。

就我的编程语言缓存而言,bw = 2.*ti/3.; 中的点将表示逐元素运算,用于 matlab 中的乘法、除法和求幂。 rorq = ((bw/to)**(1./q)); 中的双星号 ** 与某些语言中的幂运算有关。

关于题名,乘法和除法只能通过在C++中分别使用*/来执行。在某些情况下,您也可以使用按位移位运算符 <<>>

【讨论】:

  • 顺便说一句,运算符** 是许多语言中常用的求幂运算符,而不仅仅是Matlab。
  • @ThomasMatthews 我确实说过“与某些语言的幂运算有关。”
  • 移位运算符不能用于所有的乘法和除法。例如,您不能使用移位操作乘以 3。移位操作不适用于浮点。移位操作可以与将值提高到 2 的幂(正或负)相关联。
  • @ThomasMatthews 是的。我会编辑它(适用于某些情况)。另外需要注意的一点是,尽管按位运算在这里看起来很快,但它们在 R 等解释语言上运行缓慢。(通过基准测试)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多