为什么第一个能够正确递增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]++;
}
答案 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