के एकाधिक से अधिक गोल करें क्या कोई यह बता सकता है कि यह कैसे काम करता है (asz + 7) & ~ 7; यह 0 के उच्चतम एकाधिक के लिए एएसजे को बंद करता है।बिट हैक - 8
यह देखना आसान है कि ~ 7 11111000 (8 बिट प्रतिनिधित्व) उत्पन्न करता है और इसलिए पिछले 3 बिट्स को बंद कर देता है, इस प्रकार उत्पादित कोई भी संख्या 8 का एक बहु है
मेरा सवाल यह है कि मास्किंग [संपादित करें] अगले उच्च [अंत संपादन] 8 के एकाधिक उत्पादन का उत्पादन करने से पहले 7 को एज़ जोड़ना कैसा है? मैं इसे लिखने की कोशिश की कागज पर नीचे
की तरह:
1 + 7 = 8 = 1|000 (& ~7) -> 1000
2 + 7 = 9 = 1|001 (& ~7) -> 1000
3 + 7 = 10 = 1|010 (& ~7) -> 1000
4 + 7 = 11 = 1|011 (& ~7) -> 1000
5 + 7 = 12 = 1|100 (& ~7) -> 1000
6 + 7 = 13 = 1|101 (& ~7) -> 1000
7 + 7 = 14 = 1|110 (& ~7) -> 1000
8 + 7 = 15 = 1|111 (& ~7) -> 1000
एक पैटर्न स्पष्ट रूप से उभरने के लिए जो .can किसी कृपया मेरी मदद के लिए इसे बाहर का शोषण किया गया है लगता है?
उत्तर के लिए सभी को धन्यवाद। इससे मेरी पुष्टि करने में मदद मिली कि मैं क्या सोच रहा था। मैंने ऊपर दिए गए पैटर्न को लिखना जारी रखा और जब मैंने 10 पार किया, तो मैं स्पष्ट रूप से देख सकता था कि अगर मैं ऐसा कह सकता हूं तो अगले को "8 के ब्लॉक" में पदोन्नत किया जाता है।
फिर से धन्यवाद।
किसी भी पूर्णांक मीटर के लिए एक पूर्णांक एन को गोल करने के लिए '(एन/एम) * एम' –
के साथ हासिल किया जा सकता है '& ~' बिट केवल तभी काम करता है जब राउंड टॉ 2 की शक्ति हो। आम तौर पर आपको' वापसी (मूल्य) + राउंड टू - 1)/राउंड टू) * राउंड टू; 'इसके बजाए। –
@ ग्रेग्रागर्स, क्या आपको कोई विचार है कि विभाजित निर्देश कितना महंगा है? – Johan