पूर्ववर्तीता और बिटमास्क संचालन


94

मैं एक बहुत ही अजीब मामला है।

नंबर 2 ( 0b10) लें और इसे 1 ( 0b01) से बिटमस्क करें

यह उत्पादन करना चाहिए 0b00जो 0 के बराबर है।

हालाँकि, यहाँ श्री Schrödinger आता है:

var_dump(0b10 & 0b01); // int(0)
var_dump(0b10 & 0b01 == 0); // int(0)
var_dump(0b10 & 0b01 != 0); // int(0)

व्हिस्की। टैंगो। फ़ॉक्सट्रॉट।

जब मैं बिटवाइज़ ऑपरेटर्स की बात करता हूं, तो मैं यह मानता हूं कि वह सबसे तेज नहीं है - इसलिए शायद मैं कहीं बुरी तरह से बुरी तरह से घबरा गया हूं?

हालांकि, पायथन में:

0b10 & 0b01 == 0 = True

0b10 & 0b01 != 0 = False

...इसलिए?


मैं PHP में नहीं, लेकिन C, C ++ में आप बस के रूप में लिख सकते हैंvar_dump(!(0b10 & 0b01))
Grijesh Chauhan

2
कुछ वियर हालांकि: कुछ संस्करणों में, एक पार्सर बग के कारण 0b0+1मूल्यांकन 2करता है।
लिली चुंग

जवाबों:


150

आप वास्तव में यह कर रहे हैं:

var_dump(0b10 & (0b01 == 0));
var_dump(0b10 & (0b01 != 0));

प्रयत्न:

var_dump((0b10 & 0b01) == 0);
var_dump((0b10 & 0b01) != 0);

6
मुझे लगता है कि पीएचपी ने समग्र रूप से स्ट्रैन्ज ऑपरेटर पूर्वता है।
एल्विन वोंग

23
मुझे लगता है कि यही कारण है कि मैं कभी भी किसी भी भाषा में निर्भरता पर भरोसा नहीं करता। इसके अलावा, मुझे लगता है कि कोष्ठक कोड को अधिक पठनीय बनाते हैं। चरम मामलों में आप (पुनः) समूह और संक्षिप्त टिप्पणी करना चाहते हैं।
कोई जवाब नहीं

2
@AlvinWong आप सही हैं! मुझे लगता है कि शायद ही कभी एक कोड को सशर्त अभिव्यक्ति की आवश्यकता होती है जैसे 0b10 & (0b01 == 0)कि कोई हां के साथ किसी भी तरह की जानकारी क्यों लागू करेगा।
बृजेश चौहान

4
ठीक है, एक अधिक सामान्य उदाहरण पर विचार करें: टर्नरी ऑपरेटर, पीएचपी में यह पीछे की ओर है, जो इसे अन्य सभी भाषाओं की तुलना में अलग बनाता है। Ref: phpsadness
एल्विन वोंग

5
यही कारण है कि सी और सी ++ में लोगों को इन चीजों के लिए चेतावनी है।
प्लाज्मा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.