Dễ dàng. Sử dụng bitwise AND để so sánh số của bạn với giá trị 2 ^ bitNumber, có thể được tính toán rẻ bằng cách dịch chuyển bit.
//your black magic
var bit = (b & (1 << bitNumber-1)) != 0;
CHỈNH SỬA: Để thêm một chút chi tiết vì có rất nhiều câu trả lời tương tự mà không có lời giải thích:
Một bitwise AND so sánh từng số, từng bit, sử dụng phép nối AND để tạo ra một số là sự kết hợp của các bit nơi đặt cả bit đầu tiên và bit thứ hai ở vị trí đó. Đây là ma trận logic của logic AND trong một "nibble" hiển thị hoạt động của AND bitwise:
0101
& 0011
----
0001 //Only the last bit is set, because only the last bit of both summands were set
Trong trường hợp của bạn, chúng tôi so sánh số bạn đã chuyển với một số chỉ có bit mà bạn muốn tìm. Giả sử bạn đang tìm kiếm bit thứ tư:
11010010
& 00001000
--------
00000000 //== 0, so the bit is not set
11011010
& 00001000
--------
00001000 //!= 0, so the bit is set
Dịch chuyển bit, để tạo ra số mà chúng ta muốn so sánh, chính xác như âm thanh của nó: lấy số, được biểu diễn dưới dạng một tập hợp các bit và dịch chuyển các bit đó sang trái hoặc phải theo một số vị trí nhất định. Bởi vì đây là các số nhị phân và vì vậy mỗi bit là một lũy thừa lớn hơn hai so với bit ở bên phải, việc dịch chuyển bit sang trái tương đương với việc nhân đôi số một lần cho mỗi vị trí được dịch chuyển, tương đương với việc nhân số với 2 ^ x. Trong ví dụ của bạn, tìm kiếm bit thứ tư, chúng tôi thực hiện:
1 (2^0) << (4-1) == 8 (2^3)
00000001 << (4-1) == 00001000
Bây giờ bạn biết nó được thực hiện như thế nào, điều gì đang xảy ra ở cấp độ thấp và tại sao nó hoạt động.
var bit = (b & (1 << bitNumber-1)) != 0
;