这两个c ++代码块有什么区别?

时间:2011-12-30 09:55:24

标签: c++ if-statement boolean

为什么第一个能够正确递增pbf_ [k]而第二个甚至不能(递增)一次?

unsigned pbf_[5] ={0}; 
 bool m=0;

代码1:

for(int k=0;k<5;k++)    
 {

  if((m=(bit_table_[k][i][bit_index ] &bit_mask[bit]))==true)    
     pbf_[k]++;
  }

代码2:

for(int k=0;k<5;k++)    
 {
   if((bit_table_[k][i][bit_index ] & bit_mask[bit])==true)
        pbf_[k]++;
 }

4 个答案:

答案 0 :(得分:7)

在第一种情况下,掩码的结果在被比较为真之前转换为bool m

在第二种情况下,我相信位掩码是一些整数类型。在这种情况下,true将被提升为相同的整数类型(并且值为1)。

只需从比较中移除== true即可使其等效。

答案 1 :(得分:0)

第一个测试分配给bit_table_[k][i][bit_index ] & bit_mask[bit]的m的结果,而第二个测试是否

bit_table_[k][i][bit_index ] & bit_mask[bit]结果不是0

两者效果相同,只是第一次在每次迭代时将结果记录在m中。

答案 2 :(得分:0)

您先检查

if((m=(bit_table_[k][i][bit_index ] &bit_mask[bit]))==true)

为变量m分配一些值,if为true。

答案 3 :(得分:0)

我在你的代码中发现了一个问题。你需要使用&amp;&amp;而不是&amp ;. 相比之下,&amp;&amp;是一个逻辑运算符,它与&amp; - Bitwise运算符不同。

示例:

if((m =(bit_table_ [k] [i] [bit_index]&amp;&amp; bit_mask [bit]))== true)

要了解C ++中的运算符,您可以访问:http://www.worldbestlearningcenter.com/index_files/c++_operators.htm