2009-06-25 12 views
6

मैं कुछ एएस 3.0 कोड में इस पर आया:AS3 bitwise शिफ्ट 0?

(duration >> 0) 

जहां अवधि Number है। मुझे लगता है कि मुझे पता है कि bitwise right shift क्या करता है, लेकिन 0 बिट्स को स्थानांतरित करने का क्या मतलब है? यह कोड में कुछ बार होता है, मैं समझना चाहता हूं कि यह क्या करता है।

+0

मुझे लगता है कि कुछ कोड का आकलन कर रहे हैं, बस काम करने में क्या है :( – leppie

+0

यदि आप आसपास की कुछ पंक्तियां दिखाएंगे तो हमारे पास और अधिक होगा अनुमान लगाने के लिए। – grapefrukt

उत्तर

8

इस के लिए कुछ कारण हैं ..

सबसे पहले, गुणा और भाग वास्तव में जल्दी कुछ परिस्थितियों में है जब हम पारी छोड़ दिया उपयोग करते हैं, सही बदलाव ...

बाइनरी में नंबर 1 यानी 00000001 शिफ्ट यह 00,000,010 बनने के लिए छोड़ दिया है और अब यह 2 है .. यानी 1 एक्स 2

शिफ्ट इसे दो बार गुणा करने के लिए/विभाजन 4 के द्वारा, 8 के लिए 3 बार, 16 के लिए 4 बार, आदि ...

इसका उपयोग अक्सर बार-बार नहीं किया जाता है, लेकिन सी/सी ++ से भौतिकी इंजन बंदरगाह जैसे मामलों में, डेटा की विशाल मात्रा में प्रोसेसिंग, या कुछ 3 डी इंजन, हम मूल कोड के एक अवशेष के रूप में, या बस गति के लिए बदलाव देखेंगे।

(आप इसे कुछ जे 2 एमई मोबाइल जावा गेम पर भी देख सकते हैं, उदाहरण के लिए, जहां फ्लोटिंग पॉइंट इकाइयां उपलब्ध नहीं हैं यानी एक मान को 10 बिट्स छोड़ दें ताकि बाकी 10 बिट एक प्रकार के दशमलव बिंदु की तरह कार्य करें .. फिर शिफ्ट करें कुल संभव आकार की लागत पर, स्क्रीन स्थिति पर ड्राइंग करते समय वास्तविक मूल्य के लिए वापस)

जैसा कि उल्लेख किया गया है, दूसरा उपयोग एक त्वरित Math.floor() के लिए है; - लेकिन एक महत्वपूर्ण भिन्नता के साथ। मैंने कुछ महीने पहले बॉक्स 2 डी के साथ काम करने के कुछ बेंचमार्क किए और इसे सैकड़ों बार तेज पाया - क्योंकि मुझे लगता है कि दोनों रूपांतरणों को मूल रूप से संभाला जाता है।

जब ऋणात्मक संख्याओं गोलाई,
Math.floor (-7,6) = -8 और (-7।6 < < 0) = -7

आईई। < < 0 एक संख्या (फ्लोट) 0 की दिशा में 0

3

कभी कभी आप बस पूर्णता के लिए एक enum में यह देखेंगे, अर्थात

flag0 = 1 >> 0, 
flag1 = 1 >> 1, 
flag2 = 1 >> 2 

और इतने पर। यदि आपको कोड में इसका सामना करना पड़ता है, तो मैं उम्मीद करता हूं कि यह केवल कुछ बचे हुए है जब वास्तव में स्थानांतरित करने के लिए और अधिक था (परीक्षण, बदली गई आवश्यकताओं)। यह निश्चित रूप से, जब तक कि यह ऑपरेटर एएस 3 में शिफ्ट ऑपरेटर नहीं है। सी ++ में, उदाहरण के लिए, इसे इनपुट स्ट्रीम ऑपरेटर के रूप में भी उपयोग किया जाता है (आप जानते हैं, क्योंकि आप कुछ चर में कुछ इनपुट स्थानांतरित कर रहे हैं। Sigh)।

+1

>> निश्चित रूप से AS3 –

+0

में एक बिट्सफ़्ट ऑपरेटर है क्या आपका मतलब बाएं-शिफ्ट ('<<') है? – Tim

+1

@ टिम नॉर्डनफुर: अधिक समझदारी होगी, है ना? लेकिन फिर सवाल यह था कि '>>';) – OregonGhost

4

मैथ.फ्लूर() को कॉल के ओवरहेड के बिना दशमलव से छुटकारा पाने के लिए यह एक चाल हो सकती है, क्योंकि इनपुट के रूप में भी आपको एक पूर्णांक वापस मिल जाएगा।

मुझे यकीन है कि यह कैसे प्रदर्शन करने के लिए बुद्धिमान तुलना नहीं कर रहा हूँ एक (और अधिक सामान्यतः देखा) int करने के लिए (एक्स)

8

संख्या रूपांतरण पूर्णांक पूर्णांक का उपयोग करना (x) है 10% AS3 में तेजी से डाली। फिर भी बिटवाई संस्करण एएस 2 में बेहतर काम करता है।

एक्स = पूर्णांक (1,232)

// बराबर है: एक्स = 1.232 >> 0;

सबसे अच्छा समझाया: http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/das

+0

वह लिंक मुझे 404 दे रहा है। – AttackingHobo

+0

http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/ –