unsigned long set;
/*set is after modified*/
set >>= 1;
मुझे यह एक कर्नेल सिस्टम कॉल में मिला लेकिन मुझे समझ में नहीं आया, यह कैसे काम करता है?यह ">> =" ऑपरेटर का मतलब सी में क्या है?
unsigned long set;
/*set is after modified*/
set >>= 1;
मुझे यह एक कर्नेल सिस्टम कॉल में मिला लेकिन मुझे समझ में नहीं आया, यह कैसे काम करता है?यह ">> =" ऑपरेटर का मतलब सी में क्या है?
अभिव्यक्ति 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
सूचना बिट्स संख्या स्थानांतरित कर दिया।
नोट एक दिलचस्प बात: क्योंकि set
unsigned 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 के बीच अंतर।
यह "दायां-शिफ्ट" मान एक बिट से है। यदि आप एक पूर्णांक के सभी बिट्स को दाएं से दाएं स्थानांतरित करते हैं तो आप प्रभावी रूप से "2 से विभाजित" होते हैं क्योंकि बाइनरी बेस-2 नंबरिंग सिस्टम है।
कल्पना कीजिए कि आप बाइनरी में संख्या 12 है:
1100 = 12 in binary
110 = 6 in binary (1100 right-shifted)
वैसे ही जैसे कि यदि आप एक आप द्वारा 10
यह विभाजित किया जाएगा द्वारा सही एक आधार -10 संख्या में अंकों के सभी ले जाया गया बदलाव 1 से सही करने के लिए थोड़ा सा जो स्थानांतरण पर अधिक जानकारी के लिए 2. से विभाजन के बराबर है, http://msdn.microsoft.com/en-us/library/f96c63ed(v=vs.80).aspx
उपरोक्त आदेश का उल्लेख इस लिंक से ग में एक बिट .Refer द्वारा सही पारी सा बुद्धिमान संचालन करता है http://www.cprogramming.com/tutorial/bitwise_operators.html
प्रत्येक बाइनरी ऑपरेटर को =
के साथ जोड़ा जा सकता है।सभी मामलों में
dest op= expression
dest = dest op expression
के बराबर है (यदि dest
कोई साइड इफेक्ट नहीं है, सिवाय इसके कि वे केवल एक बार जगह लेने के लिए)।
तो इसका मतलब है कि
set>>=1;
के बराबर है:
set = set >> 1;
>>
के बाद से बाइनरी सही-शिफ्ट ऑपरेटर है, यह सही 1 थोड़ा करके set
में मूल्य शिफ्ट करने का मतलब है।
आपको बहुत धन्यवाद – Rotom92
@ Rotom92 आपका स्वागत है Rotom :) –