【问题标题】: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

【问题讨论】:

    标签: c++ openfoam


    【解决方案1】:

    这是按位和运算符。

    它将第一个操作数的每个位与第二个操作数的相应位进行比较。 如果两个位都为 1,则结果位设置为 1,否则为 0。

    例如:

         11001001  
       & 10111000 
         -------- 
       = 10001000
    

    【讨论】:

    • 运算符 & 被 OpenFOAM 类重载。查看@Herpes-Free-Engineer 的答案
    【解决方案2】:

    恐怕firstsecond 的答案大多不适用于 OpenFOAM 上下文。

    在 OpenFOAM 上下文中,如果操作数是张量,& 就是 inner product。因此,deltaRRightgradT[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 ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2010-11-07
      • 1970-01-01
      • 2020-10-24
      • 2019-10-10
      相关资源
      最近更新 更多