2013-07-21 13 views

उत्तर

15

अभिव्यक्ति set >>= 1; मतलब है set = set >> 1;1 (सही पारी ऑपरेटर की जांच Bitwise Shift Operators बिटवाइज़ >> के आत्म सौंपा फार्म) के द्वारा होता है कि set के अधिकार पारी बिट्स।

मान लीजिए अगर set है:

BIT NUMBER 31 n=27  m=17     0 
       ▼ ▼   ▼     ▼ 
set =   0000 1111 1111 1110 0000 0000 0000 0000 

फिर बाद set >> = 1; चर set हो जाता है:

BIT NUMBER 31 n=26  m=16     0 
       ▼  ▼   ▼     ▼ 
set =   0000 0111 1111 1111 0000 0000 0000 0000 

सूचना बिट्स संख्या स्थानांतरित कर दिया।

नोट एक दिलचस्प बात: क्योंकि setunsigned long है तो यह >> आपरेशन होना चाहिए logical shift (unsigned shift) एक तार्किक पारी एक नंबर के साइन बिट की रक्षा नहीं करता है।

इसके अतिरिक्त, क्योंकि आप सभी बिट्स को दाएं (कम महत्वपूर्ण संख्या की ओर) स्थानांतरित कर रहे हैं, इसलिए एक सही शिफ्ट = दो से विभाजित संख्या है।

check this code (सिर्फ प्रदर्शित करने के लिए अंतिम बिंदु):

int main(){ 
unsigned long set = 268304384UL; 
set >>= 1; 
printf(" set :%lu \n", set); 
set = 268304384UL; 
set /= 2; 
printf(" set :%lu \n", set); 
return 1; 
} 

और उत्पादन:

set :134152192 
set :134152192 

(ध्यान दें: अपनी नहीं >> का मतलब होता है, और / दोनों एक ही हैं)

इसी तरह बाएं शिफ्ट के लिए आपके पास ऑपरेटर <<= है, अन्य उपलब्ध Bitwise operators औरदेखें, अनुभाग भी देखें: bit expressions और signed/arithmetic shift and unsigned shift के बीच अंतर।

+0

आपको बहुत धन्यवाद – Rotom92

+0

@ Rotom92 आपका स्वागत है Rotom :) –

6

यह "दायां-शिफ्ट" मान एक बिट से है। यदि आप एक पूर्णांक के सभी बिट्स को दाएं से दाएं स्थानांतरित करते हैं तो आप प्रभावी रूप से "2 से विभाजित" होते हैं क्योंकि बाइनरी बेस-2 नंबरिंग सिस्टम है।

कल्पना कीजिए कि आप बाइनरी में संख्या 12 है:

1100 = 12 in binary 
110 = 6 in binary (1100 right-shifted) 

वैसे ही जैसे कि यदि आप एक आप द्वारा 10

4

यह विभाजित किया जाएगा द्वारा सही एक आधार -10 संख्या में अंकों के सभी ले जाया गया बदलाव 1 से सही करने के लिए थोड़ा सा जो स्थानांतरण पर अधिक जानकारी के लिए 2. से विभाजन के बराबर है, http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx

3

प्रत्येक बाइनरी ऑपरेटर को = के साथ जोड़ा जा सकता है।सभी मामलों में

dest op= expression 

dest = dest op expression 

के बराबर है (यदि dest कोई साइड इफेक्ट नहीं है, सिवाय इसके कि वे केवल एक बार जगह लेने के लिए)।

तो इसका मतलब है कि

set>>=1; 

के बराबर है:

set = set >> 1; 

>> के बाद से बाइनरी सही-शिफ्ट ऑपरेटर है, यह सही 1 थोड़ा करके set में मूल्य शिफ्ट करने का मतलब है।

संबंधित मुद्दे