& 在这段代码中的作用是啥?
Posted
技术标签:
【中文标题】& 在这段代码中的作用是啥?【英文标题】:What is the role of & in this piece of code?& 在这段代码中的作用是什么? 【发布时间】:2019-10-16 03:43:53 【问题描述】:我正在尝试理解foam-extend 中的dbns 代码。但我对下面给出的以下代码的特定部分有点怀疑。
deltaRLeft & gradrho[own] 或
deltaRRight & gradU[nei]
我这里用的东西&是一个引用运算符,但是如果有人能详细解释一下,对我有帮助。
Flux::evaluateFlux
(
rhoFlux_[faceI],
rhoUFlux_[faceI],
rhoEFlux_[faceI],
rho_[own] + rhoLimiter[own]*(deltaRLeft & gradrho[own]),
rho_[nei] + rhoLimiter[nei]*(deltaRRight & gradrho[nei]),
U_[own] + cmptMultiply(ULimiter[own], (deltaRLeft & gradU[own])),
U_[nei] + cmptMultiply(ULimiter[nei], (deltaRRight & gradU[nei])),
T_[own] + TLimiter[own]*(deltaRLeft & gradT[own]),
T_[nei] + TLimiter[nei]*(deltaRRight & gradT[nei]),
R[own],
R[nei],
Cv[own],
Cv[nei],
Cp[own],
Cp[nei],
Sf[faceI],
magSf[faceI]
);
&这里到底在做什么,如果可以详细解释的话。 部分代码来自dbns/numericFlux/numericFlux.C
【问题讨论】:
【参考方案1】:这是按位和运算符。
它将第一个操作数的每个位与第二个操作数的相应位进行比较。 如果两个位都为 1,则结果位设置为 1,否则为 0。
例如:
11001001
& 10111000
--------
= 10001000
【讨论】:
运算符 & 被 OpenFOAM 类重载。查看@Herpes-Free-Engineer 的答案【参考方案2】:恐怕first 和second 的答案大多不适用于 OpenFOAM 上下文。
在 OpenFOAM 上下文中,如果操作数是张量,&
就是 inner product。因此,deltaRRight
和 gradT[nei]
实际上是张量对象。
请查看OpenFOAM's programmers' guide,第 1.4.1 和 1.3.1 节。
【讨论】:
这是 OpenFOAM 上下文中的正确答案。为什么没有人支持它?或者接受它是正确的(@Bidesh-Sengupta)【参考方案3】:有两个不同的&
运算符。
按位与运算符 (&) 将第一个操作数的每个位与第二个操作数的相应位进行比较。如果两个位都为1,则对应的结果位设置为1。否则,对应的结果位设置为0。
按位与运算符的两个操作数都必须是整数类型。
例如:
#include <iostream>
using namespace std;
int main()
unsigned short a = 0xFFFF; // pattern 1111 ...
unsigned short b = 0xAAAA; // pattern 1010 ...
cout << hex << ( a & b ) << endl; // prints "aaaa", pattern 1010 ...
【讨论】:
以上是关于& 在这段代码中的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章