सी ++ आप रेंज की जाँच के लिए एक में दो पूर्णांक तुलना गठबंधन करने के लिए अनुमति देता है, जैसेडबल तुलना चाल जावा में
(unsigned)X < (unsigned)Upper
जब
0 <= X < Upper
जावा भाषा नहीं अहस्ताक्षरित प्रकार है जो सच देता है। क्या आप एक ही प्रभाव प्राप्त करने के लिए एक ही प्रभाव प्राप्त करने का एक तरीका देखते हैं, न कि बहुत अधिक ओवरहेड?
अद्यतन:
@Bathsheba द्वारा एक टिप्पणी से, चार प्रकार अहस्ताक्षरित 16 बिट है और के रूप में मेरे पूर्णांकों शॉर्ट्स की रेंज में वास्तव में कर रहे मेरा उद्देश्य के लिए फिट हो जाएगा।
प्रश्न int
एस के लिए खुला रहता है।
संभवतः (X | (Upper - 1 - X)) >= 0
की रेखा में कुछ, जो 30 बिट्स की एक श्रृंखला की अनुमति देता है।
मेरे पास मेरे सिर के ऊपर से कोई जवाब नहीं है, लेकिन जिज्ञासा से, क्या यह वास्तव में महत्वपूर्ण है? मुझे यकीन नहीं है कि दो तुलनात्मक आदेशों को निष्पादित करना, जो मूल प्रोसेसर कमांड हैं, किसी भी तरह से कलाकारों की तुलना में अधिक महंगा है और आपके पास सी ++ की तुलना है। मुझे लगता है कि वास्तव में ऐसा फीचर भारी अनुकूलन चाहते हैं और मुझे विश्वास नहीं है कि पहला विकल्प बेहतर है। ऐसा कहा जा रहा है कि ये सिर्फ अटकलें हैं, मैं कोई विशेषज्ञ नहीं हूं। – TheFooBarWay
क्या यह चाल भी बड़े एक्स या बड़े ऊपरी (~ integerMax) के साथ woking है? – olsli
हां यह वास्तव में महत्वपूर्ण है। सशर्त शाखाएं बहुत महंगी हो सकती हैं (जैसे 1 चक्र की बजाय 12 चक्र) क्योंकि वे शाखा की गलतफहमी के मामले में पाइपलाइनिंग तोड़ते हैं। जब यह एक लूप के अंदर किया जाता है जिसे प्रति सेकेंड 70 मिलियन बार निष्पादित करने की आवश्यकता होती है, तो इससे कोई फर्क पड़ता है। वैसे, कास्ट वास्तव में नहीं किया जाता है और शून्य लागत है। (बस एक हस्ताक्षरित तुलना का उपयोग किया जाता है)। –