簡體   English   中英

這兩個c ++代碼塊有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM