2010-11-03 22 views
35

के बीच फ़्लिप करने के लिए अंकगणितीय ऑपरेटरों का उपयोग कर सकते हैं क्या तर्क 0 और 1 के साथ पूर्णांक के बीच फ़्लिप करने के लिए तर्क और बिटवाई ऑपरेटरों, केवल अंकगणितीय ऑपरेटरों का उपयोग किए बिना कोई तरीका है?क्या आप 0 और 1

यानी। "चर? = चर" कर देगा चर एक 1 अगर यह 0 या 0 अगर यह एक एक

+0

ध्यान दें कि जावास्क्रिप्ट में, नीचे दिए गए कई उत्तर एक बूलियन का मूल्यांकन करते हैं, संख्या नहीं। उदाहरण के लिए: '! X',' (x <= 0) ',' (x == 0) ', आदि –

उत्तर

123
x = 1 - x 

स्विच जाएगा 0 और 1. यह मानते हुए कि यह एक के रूप में आरंभ नहीं हो जाता के बीच

+0

इसे अधिक व्यापक रूप से लागू करने के लिए, यदि' x' सकारात्मक संख्याओं की एक विशिष्ट श्रृंखला में है, तो आप इसका उपयोग इसके मूल्य को उलट करने के लिए भी कर सकता है (यानी '7-x' = 0/7, 1/6, 2/5, 3/4)। – Pluto

4

बस किस्म का एक सा के लिए:

x = 1/(x + 1); 

x = (x == 0); 

x = (x != 1); 

अंकगणित ऑपरेटरों के लिए == और != पर विचार नहीं है या नहीं। शायद नहीं, और स्पष्ट रूप से हालांकि वे सी में काम करते हैं, अधिक दृढ़ता से टाइप की गई भाषा परिणाम को पूर्णांक में परिवर्तित नहीं करती हैं।

20

संपादित करें: मैं प्रश्न पढ़ने में भूलना, सोचा ओपी any ऑपरेटर

इस्तेमाल कर सकते हैं कुछ और ... एक ऑपरेटर का उपयोग कर के बिना (इन पर ध्यान न दें)

x ^= 1  // bitwise operator 
x = !x  // logical operator 
x = (x <= 0) // kinda the same as x != 1 

?

int arr[] = {1,0} 
x = arr[x] 
+0

^एक बिटवाई ऑपरेटर है और! एक तार्किक ऑपरेटर है। – MAK

+2

दूसरी विधि –

+0

@MAK के लिए +1, मैंने प्रश्न को गलत तरीके से पढ़ा :('संपादित' – st0le

12

फिर भी एक और तरीका है: st0le की दूसरी विधि

x = "\1"[x] 
+3

+1 क्योंकि यह आपको 0 या 1 हमेशा देगा यदि आप गलती से उस सीमा के बाहर एक पूर्णांक देते हैं। –

+0

@NickForge अन्य इनपुट को ध्यान में रखते हुए कि 1 या 0 इस प्रश्न के दायरे में अवैध है, क्या आप वाकई अच्छे हैं कि यह इस पर विरोध नहीं करेगा? – Alex

+1

@Alex चाहे वह अच्छी बात है या नहीं, "रक्षात्मकता" की भाषा और अपेक्षाओं पर निर्भर करती है। उदाहरण के लिए सी, बूलियन को 1 से अधिक बिट के साथ पूर्णांक के रूप में संग्रहीत किया जाता है, इसलिए "अवैध" की अवधारणा कुछ हद तक अस्पष्ट है। –

3

कॉमेडी भिन्नता आप बस इस

+(!0) // output:1 

+(!1) // output:0 
+0

हे, गैर-स्पष्ट समाधान से प्यार है। – Hamish

+1

और यदि आपको यह पसंद है, तो आपको 'x = x ["\ 1"];' (सी और सी ++) पसंद आएगा। –

2

एक और तरीका एक सा फ्लिप करने की कोशिश कर सकते हैं।

x = ABS(x - 1) // the absolute of (x - 1) 
संबंधित मुद्दे