2012-02-20 39 views
30

Nếu tôi có byte, phương thức sẽ tìm cách lấy một bit ở một vị trí nhất định như thế nào?Làm thế nào để nhận được giá trị của một bit tại một vị trí nhất định từ một byte?

Đây là những gì tôi biết và tôi không nghĩ nó hoạt động.

public byte getBit(int position) { 
    return (byte) (ID >> (position - 1)); 
} 

nơi ID là tên của byte mà tôi đang truy xuất thông tin.

+0

của bạn gần như có bạn chỉ cần mặt nạ ra khỏi chút bạn vừa chuyển bởi ANDing với 0x01 – Dampsquid

+0

trùng lặp có thể xảy ra của [Java: Kiểm tra nếu một chút là 0 hoặc 1 trong một thời gian dài] (https://stackoverflow.com/questions/1092411/java-checking-if-a-bit-is-0-or-1-in-a-long) –

Trả lời

66
public byte getBit(int position) 
{ 
    return (ID >> position) & 1; 
} 

ID dịch chuyển phải theo vị trí sẽ làm cho bit #position nằm ở vị trí xa nhất bên phải số. Kết hợp với bitwise AND & với 1 sẽ cho bạn biết nếu bit được đặt.

position = 2 
ID = 5 = 0000 0101 (in binary) 
ID >> position = 0000 0001 

0000 0001 & 0000 0001(1 in binary) = 1, because the furthest right bit is set. 
+0

Thực ra, đó là bitwise và; hợp lý và là &&. –

+0

@CharlieMartin Cảm ơn bạn đã chỉ ra điều đó, tôi sẽ chỉnh sửa. –

7

Bạn muốn tạo mặt nạ bit và làm bitwise và. Điều đó sẽ kết thúc tìm kiếm rất gần với những gì bạn có - sử dụng thay đổi để thiết lập bit thích hợp, sử dụng & để làm một bitwise op.

Vì vậy

return ((byte)ID) & (0x01 << pos) ; 

nơi pos phải nằm trong khoảng từ 0 đến 7. Nếu bạn có các bit quan trọng nhất là "bit 1" sau đó bạn cần bạn -1 nhưng tôi khuyên bạn nên chống lại nó - loại mà thay đổi vị trí luôn luôn là một nguồn lỗi cho tôi.

0

để có được các bit thứ n trong nguyên

return ((num >> (n-1)) & 1); 
Các vấn đề liên quan