आसान। थोड़ा सा उपयोग करें और अपने नंबर की तुलना मूल्य 2^बिट नम्बर के साथ करें, जिसे सस्ती रूप से बिट-स्थानांतरण द्वारा गणना की जा सकती है।
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
संपादित करें: थोड़ा और विस्तार को जोड़ने के लिए, क्योंकि वहाँ कोई स्पष्टीकरण के साथ इसी तरह के जवाब का एक बहुत हैं:
एक बिटवाइज़ और प्रत्येक संख्या की तुलना, थोड़ा-दर-बिट का उपयोग कर एक और शामिल हो उस संख्या का उत्पादन करने के लिए जो बिट्स का संयोजन है जहां उस स्थान पर पहली बिट और दूसरी बिट दोनों सेट की गई थीं। यहाँ एक "निबल" में के तर्क मैट्रिक्स AND तर्क है कि एक बिटवाइज़ के संचालन और पता चलता है:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
आपके मामले में, हम नंबर पर आप केवल बिट आप देखना चाहते है कि एक नंबर के साथ पारित कर दिया की तुलना सेट के लिए मान लीजिए कि आप चौथे बिट के लिए देख रहे हैं:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
बिट-स्थानांतरण, संख्या हम के खिलाफ तुलना करना चाहते हैं का निर्माण करने के, है वास्तव में क्या यह जैसा लगता है: नंबर, बिट्स का एक सेट के रूप में प्रतिनिधित्व लेते हैं, और उन बिट्स को स्थानों की एक निश्चित संख्या से बाएं या दाएं स्थानांतरित करें। चूंकि ये द्विआधारी संख्याएं हैं और इसलिए प्रत्येक बिट एक के दायरे में से एक से अधिक शक्ति है, बाईं ओर थोड़ा-स्थानांतरित करने के लिए स्थानांतरित होने वाली प्रत्येक स्थान के लिए संख्या को दोगुनी करने के बराबर है, जो संख्या को गुणा करने के बराबर है 2^एक्स। अपने उदाहरण में, चौथा बिट की तलाश में है, हम करते हैं:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
अब आप जानते हैं कि यह कैसे हुआ, क्या कम स्तर पर हो रहा है, और क्यों यह काम करता है।
गायब ब्रेसिज़ (ऑपरेटर प्राथमिकता) के कारण यह कोड संकलित नहीं होता है, यह 'var bit = (b & (1 << bitNumber-1)) होना चाहिए! = 0'; अंतर्निहित समाधान के लिए – bitbonk