2011-12-30 20 views
5

पहला व्यक्ति पीबीएफ_ [के] सही ढंग से वृद्धि करने में सक्षम क्यों है जबकि दूसरा व्यक्ति इसे एक बार (वृद्धि) भी नहीं करता है?इन दो सी ++ कोड ब्लॉक के बीच क्या अंतर है?

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

पहले मामले में, मास्किंग का परिणाम सत्य से तुलना करने से पहले m में परिवर्तित हो जाता है।

दूसरे मामले में, मेरा मानना ​​है कि बिटमैस्क कुछ पूर्णांक प्रकार हैं। उस स्थिति में true को एक ही पूर्णांक प्रकार में प्रचारित किया जाएगा (और मान 1 है)।

तुलनात्मक रूप से तुलना करने के लिए तुलना से == true हटाएं।

+3

यदि जॉन को एहसास नहीं होता है, 'और 'बिटवाई है और तार्किक नहीं है, तो परिणाम एक पूर्णांक है। एक बूलियन संदर्भ में मूल्यांकन किया गया एक nonzero पूर्णांक सत्य है, लेकिन यह एक पूर्णांक के रूप में 'true' के मान के बराबर नहीं है * जो है 1. –

+0

इसे ठीक करने का एक और तरीका एक स्पष्ट कलाकार का उपयोग 'बूल' करना होगा। हालांकि, यह मूर्खतापूर्ण है, क्योंकि 'सत्य' की तुलना में पहली जगह मूर्खतापूर्ण है। इसी तरह वाक्यांश "यह सच है कि" अंग्रेजी में लगभग हमेशा अनिवार्य है, '== सत्य' प्रोग्रामिंग में लगभग हमेशा अनिवार्य है। –

0

पर पहले bit_table_[k][i][bit_index ] & bit_mask[bit] के मूल्य का मीटर काम का परिणाम परीक्षण, जबकि दूसरी बस का परीक्षण करती है चाहे

bit_table_[k][i][bit_index ] & bit_mask[bit] परिणाम 0

दोनों एक ही प्रभाव, सिवाय इसके कि पहले प्रत्येक पुनरावृत्ति पर परिणाम में एम रिकॉर्ड होता है।

+1

नहीं, उनके पास समान प्रभाव नहीं है, और दूसरा परीक्षण का आपका विवरण है, मुझे विश्वास है, गलत है। बो पर्सन का जवाब देखें। – Mat

0

आप पहली बार जाँच

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

चर मीटर करने के लिए कुछ मूल्य assining है और उस के रूप में अगर सही से लिया जाता है।

0

मुझे आपके कोड में एक समस्या मिली। & के बजाय आपको & & का उपयोग करने की आवश्यकता है। तुलना में, & & एक तार्किक ऑपरेटर है और यह & - बिटवाई ऑपरेटर से अलग है।

उदाहरण:

अगर ((एम = (bit_table_ [k] [मैं] [bit_index] & & bit_mask [बिट])) == सच)

सी में ऑपरेटर के बारे में जानने के लिए ++ आप कर सकते हैं यहां जाएं: http: //www.worldbestlearningcenter.com/index_files/c++_operators.htm

+0

नहीं, वह थोड़ा सा ऑपरेटर चाहता है क्योंकि उसे यह जांचने की ज़रूरत है कि एक विशिष्ट बिट दोनों मानों में सेट है। हालांकि, उसे ** सत्य की तुलना में ** की तुलना करने की आवश्यकता नहीं है, क्योंकि यह '1' की तुलना करने के बराबर है, जब यह "मैच" पर भी कुछ अन्य गैर-शून्य मूल्य हो सकता है। @ बॉपरसन यह सही है। –

संबंधित मुद्दे