ऑपरेटर ^ बिटवाइज़-एक्सर (देखें और;)। एक बिट जोड़ी के लिए परिणाम है,
0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0
तो अभिव्यक्ति,
( x ^ 0x1 )
inverts / x के 0 वें बिट को फ़्लिप करता है (अन्य बिट्स को अपरिवर्तित छोड़कर)।
विचार करें कि क्या x में 0x0 और 0x1 के अलावा मान हो सकते हैं? जब x एक एकल बिट फ़ील्ड होता है, तो इसमें केवल 0x0 और 0x1 मान हो सकते हैं, लेकिन जब x एक int (char / short / long / etc) होता है, तो bit0 के अलावा बिट्स अभिव्यक्ति के परिणाम को प्रभावित कर सकते हैं।
दी गई अभिव्यक्ति बिट्स के साथ बिट्स को परिणाम को प्रभावित करने की अनुमति देती है,
if ( 0 != ( x ^ 0x1 ) )
जो इस (सरल) अभिव्यक्ति के बराबर सत्यता है,
if ( x ^ 0x1 )
ध्यान दें कि यह अभिव्यक्ति केवल बिट 0 की जांच करेगी,
if( 0x1 & ( x ^ 0x1 ) )
तो जैसा कि प्रस्तुत किया गया है अभिव्यक्ति वास्तव में दो अभिव्यक्ति चेक का संयोजन है,
if( ( x & ~0x1 ) //look at all bits besides bit0
|| ( x ^ 0x1 ) ) //combine with the xor expression for bit0
क्या लेखक ने केवल बिट 0 की जांच करने का इरादा किया है, और इस अभिव्यक्ति का उपयोग करने का मतलब है,
if( 0x1 & ( x ^ 0x1 ) )
या लेखक ने bit1-bitN और x0 के xor के मानों को प्राप्त करने का इरादा किया है?