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

Joh*_*ohn 5 c++ if-statement boolean

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

unsigned pbf_[5] ={0}; 
 bool m=0;
Run Code Online (Sandbox Code Playgroud)

代码1:

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

  if((m=(bit_table_[k][i][bit_index ] &bit_mask[bit]))==true)    
     pbf_[k]++;
  }
Run Code Online (Sandbox Code Playgroud)

代码2:

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

Bo *_*son 7

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

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

只需== true从比较中删除它们即可.

  • 如果@John没有意识到,`&`是按位AND,不是逻辑AND,所以结果是整数.在布尔上下文中计算的非零整数为true,但它不等于"true"的值作为整数*为1. (3认同)