2010-08-28 17 views
15

मैं अपने तर्कों के रूप में झंडे के साथ एक समारोह बनाने के प्रयास कर रहा हूँ, लेकिन उत्पादन हमेशा क्या उम्मीद के साथ अलग है:PHP फ़ंक्शन झंडे, कैसे?

define("FLAG_A", 1); 
define("FLAG_B", 4); 
define("FLAG_C", 7); 
function test_flags($flags) { 
if($flags & FLAG_A) echo "A"; 
if($flags & FLAG_B) echo "B"; 
if($flags & FLAG_C) echo "C"; 
} 
test_flags(FLAG_B | FLAG_C); # Output is always ABC, not BC 

मैं इस समस्या का समाधान कैसे कर सकते हैं?

उत्तर

25

झटके को थोड़ा सा करने के लिए या एक साथ ठीक से 2 की शक्तियां होनी चाहिए। निरंतर मूल्यों के लिए

define("FLAG_A", 0x1); 
define("FLAG_B", 0x2); 
define("FLAG_C", 0x4); 
function test_flags($flags) { 
    if ($flags & FLAG_A) echo "A"; 
    if ($flags & FLAG_B) echo "B"; 
    if ($flags & FLAG_C) echo "C"; 
} 
test_flags(FLAG_B | FLAG_C); # Now the output will be BC 

का उपयोग हेक्साडेसिमल नोटेशन कार्यक्रम के व्यवहार के लिए कोई फर्क नहीं पड़ता, लेकिन प्रोग्रामर है कि मूल्यों एक bit field रचना करने पर बल में से एक मुहावरेदार तरीका है। एक और बदलावों का उपयोग करना होगा: 1<<0, 1<<1, 1<<2, & सी।

+0

आह, आपकी मदद के लिए बहुत बहुत धन्यवाद! – Teiv

+2

दोस्त, आपकी टिप्पणी से आउटपुट अपेक्षाएं सही नहीं हैं। क्योंकि आउटपुट हमेशा अन्यथा होगा - एबीसी की बजाय बीसी और यह कार्यक्रम के लिए एक सही व्यवहार है। –

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