[英]what is the difference between these two c++ code blocks?
為什么第一個能夠正確遞增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]++;
}
在第一種情況下,掩蔽的結果在與真實比較之前被轉換為bool m
。
在第二種情況下,我相信位掩碼是一些整數類型。 在這種情況下, true
將被提升為相同的整數類型(並且值為1)。
只需從比較中刪除== true
即可使它們等效。
第一個測試分配給m的bit_table_[k][i][bit_index ] & bit_mask[bit]
,而第二個只測試是否
bit_table_[k][i][bit_index ] & bit_mask[bit]
結果不為0
兩者都有相同的效果,除了第一次在每次迭代中記錄m的結果。
你先檢查一下
if((m=(bit_table_[k][i][bit_index ] &bit_mask[bit]))==true)
正在為變量m賦予一些值,並且if為true。
我在你的代碼中發現了一個問題。 您需要使用&&而不是&。 相比之下,&&是一個邏輯運算符,它與& - Bitwise運算符不同。
例:
if((m =(bit_table_ [k] [i] [bit_index] && bit_mask [bit]))== true)
要了解C ++中的operator,您可以訪問:http://www.worldbestlearningcenter.com/index_files/c++_operators.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.