解释以下C ++代码部分

时间:2011-04-07 07:05:19

标签: c++ bit-manipulation

//class start--

//Global variable

static PMSK *savepr;
static PRC *prs;

//inside some method

static PMSK wkpm;
PMSK *pm;

if (ipf) {
    k = to_bits(312, &msk);     // This will return k=24 and msk =char(00000001),  
    if ( pm->orbits[k] & msk )  // See the answer of my previous question.
        prs[i].pccused = 1; 
}

对于to_bits方法,请参阅链接

Explain the following C++ method

我不熟悉C ++编码。在第二个if块中有什么用?并解释变量声明吗?

由于

3 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望了解if - 条款:

if ( pm->orbits[k] & msk )包含bitwise-AND operator,它取pm->orbits[k]的位和msk的位,并返回两个值中的位(即“AND”)一部分)。

例如:
0010 1101& 1010 1010 = 0010 1000

修改 建议您阅读a good beginners C++ book以了解pointers->)和数组([k])。

由于您没有提供有关PMSK类型的信息,我不知道mp->orbits[k]会给您什么,除此之外:PMSK结构或类似乎包含一个名为orbits的数组,而pm->orbits[24]表示它的第25个(不是第24个!)元素。

答案 1 :(得分:1)

if ( pm->orbits[k] & msk ) // check to see if they aare bit-by-bit identical.

变量声明是如何进行的?不知道你的意思,澄清。

答案 2 :(得分:0)

class start--

这是无效的语法。

static PMSK *savepr;
static PRC *prs;

这些是指向具有内部链接的PMSK,PRC类型的对象的指针。

static PMSK wkpm;
PMSK *pm;

具有内部链接的对象PMSK的实例和指向具有翻译单元范围的PMSK对象“wkpm”的指针。

    if(ipf){
        k = to_bits(312, &msk);  // you might want to post this "to_bits" function

    if ( pm->orbits[k] & msk )  // this returns the k+1 object in the array "orbits" and performs a bitwise AND with "msk"
// you might want to post the declaration for this pm instance and the class decaration
        prs[i].pccused = 1;  // this sets the member variable "pcussed" of object i + 1 in the array "prs" to 1
}