2012-03-24 22 views
6

मैं short integers की XOR की गणना कर रहा हूं XOR ^ ऑपरेटर पारंपरिक फैशन में। नीचे method-दो छोटे पूर्णांकों का एक्सओआर

short a=197; 
short b=341; 
short y = (short) (a^b); 

हालांकि XOR हमेशा पूर्णांक लौट आए लेकिन मेरे मामले आदानों में कर रहे हैं कम पूर्णांक, यही वजह है कि मैं XOR उत्पादन के लिए कम कास्टिंग कर रहा हूँ। एक्सओआर की गणना विभिन्न शिष्टाचार में की जा सकती है (उदाहरण: BigInteger आदि का उपयोग करना) लेकिन प्रदर्शन के अनुसार (कम समय) जो कि छोटे पूर्णांक के लिए सबसे अच्छा है? प्रदर्शन को ध्यान में रखते हुए, क्या मुझे पहले प्रत्येक शॉर्ट पूर्णांक को Integer.toBinaryString(number) का उपयोग करके द्विआधारी संख्या में परिवर्तित करना चाहिए, फिर थोड़ा सा XOR लागू करें?

उत्तर

8
short s1 = ... 
short s2 = ... 
short result = (short) (s1^s2); 

यह दो short XOR के लिए सबसे कारगर तरीका है एक साथ है यह BigInteger एस बनाने के ऊपरी हिस्से में नहीं चलता है और कास्ट कभी भी ओवरफ़्लो समस्या का कारण नहीं बनता क्योंकि s1 और s2short से शुरू होते हैं।

4

यह वास्तव में स्पष्ट नहीं है कि "प्रत्येक शॉर्ट पूर्णांक को बाइनरी संख्या में परिवर्तित करें" - एक छोटा पहले से ही एक संख्या है, और इसका प्रतिनिधित्व स्वाभाविक रूप से बाइनरी है।

तुम बस चाहते हैं:

short x = ...; 
short y = ...; 
short z = (short) (x^y); 

आप कलाकारों की जरूरत के रूप में x^yint करने के लिए दोनों को बढ़ावा देंगे, और परिणाम एक int हो जाएगा। हालांकि, परिणाम short की सीमा में होना चाहिए, इसलिए जानकारी खोने के बिना इस कलाकार को निष्पादित करना सुरक्षित है।

सामान्य रूप से एक्सओआर के बारे में अधिक जानकारी के लिए section 15.22.1 of the JLS और section 5.6.2 सामान्य रूप से द्विआधारी संख्यात्मक पदोन्नति के बारे में जानकारी के लिए देखें।

+0

@EricJ .: क्या आप अभी भी उस संस्करण को देख रहे थे जहां मेरे पास '(x^y) 'के चारों ओर कोष्ठक नहीं थे? मैंने कुछ समय पहले तय किया :) –

+0

हाँ मैं अद्यतन देखता हूं। टिप्पणी वापस लेना :-) –

+0

@ जोनस्केट: "" प्रत्येक छोटे पूर्णांक को बाइनरी संख्या में परिवर्तित करके "" मेरा मतलब था कि मुझे पहले प्रत्येक छोटे पूर्णांक को 'Integer.toBinaryString (संख्या)' का उपयोग करके बाइनरी स्ट्रिंग में परिवर्तित करना चाहिए, फिर 'bitwise XOR 'लागू करें ? –

1

मैं नहीं 100% यकीन है कि आप क्या कह रहे हैं, लेकिन उम्मीद है कि इस मदद करता है:

जावा दोनों ऑपरेंड पूर्णांक टाइप करने के लिए coerces। यही कारण है कि परिणाम एक int है।

http://java.comsci.us/syntax/expression/bitwisexor.html

तो अपने शॉर्ट्स स्वचालित रूप से एक पूर्णांक में परिवर्तित हो जाएगा, और XOR आपरेशन पूर्णांक ऑपरेंड पर बहुत कुशलता से किया जाएगा।

यदि ऑपरेटरों में से एक लंबा है, तो दोनों प्रकारों को इसके बजाय लंबे समय तक मजबूर किया जाता है। हालांकि, यह आपके मामले में लागू नहीं होता है।

निष्कर्ष यह देखते हुए कि आपके इनपुट के दोनों कम कर रहे हैं, आप एक छोटी परिणाम की आवश्यकता है, ऐसा करने के लिए सबसे कारगर बात

short result = (short) (operandA^operandB); 
संबंधित मुद्दे