ง่าย. ใช้บิตและเพื่อเปรียบเทียบตัวเลขของคุณกับค่า 2 ^ bitNumber ซึ่งสามารถคำนวณได้อย่างถูกต้องโดยการขยับบิต
var bit = (b & (1 << bitNumber-1)) != 0;
แก้ไข:หากต้องการเพิ่มรายละเอียดอีกเล็กน้อยเนื่องจากมีคำตอบที่คล้ายกันมากมายโดยไม่มีคำอธิบาย:
บิตและเปรียบเทียบตัวเลขแต่ละตัวแบบทีละบิตโดยใช้ AND เพื่อสร้างตัวเลขที่รวมกันของบิตที่ทั้งบิตแรกและบิตที่สองในตำแหน่งนั้นถูกตั้งค่า นี่คือเมทริกซ์ลอจิกของตรรกะ AND ใน "ตอด" ที่แสดงการทำงานของบิต AND:
0101
& 0011
----
0001
ในกรณีของคุณเราเปรียบเทียบหมายเลขที่คุณส่งผ่านกับตัวเลขที่มีเพียงบิตที่คุณต้องการค้นหา สมมติว่าคุณกำลังมองหาบิตที่สี่:
11010010
& 00001000
--------
00000000
11011010
& 00001000
--------
00001000
การขยับบิตเพื่อสร้างจำนวนที่เราต้องการเปรียบเทียบนั้นเป็นสิ่งที่ดูเหมือนกัน: ใช้ตัวเลขแสดงเป็นชุดของบิตและเลื่อนบิตเหล่านั้นไปทางซ้ายหรือขวาตามจำนวนที่แน่นอน เนื่องจากสิ่งเหล่านี้เป็นเลขฐานสองดังนั้นแต่ละบิตจึงมีกำลัง - ของสองมากกว่าหนึ่งทางด้านขวาการขยับบิตไปทางซ้ายจึงเท่ากับการเพิ่มจำนวนสองครั้งหนึ่งครั้งสำหรับแต่ละตำแหน่งที่เลื่อนซึ่งเทียบเท่ากับการคูณจำนวนด้วย 2 ^ x. ในตัวอย่างของคุณมองหาบิตที่สี่เราดำเนินการ:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
ตอนนี้คุณรู้แล้วว่ามันเป็นอย่างไรเกิดอะไรขึ้นในระดับต่ำและทำไมถึงได้ผล
var bit = (b & (1 << bitNumber-1)) != 0;