2011-01-12 10 views
65

Tôi đang cố gắng đặt bit bằng biến byte Java. Nó cung cấp các phương thức propper như .setBit(i). Có ai biết làm thế nào tôi có thể nhận ra điều này?Đặt bit cụ thể theo byte

tôi có thể lặp chút khôn ngoan thông qua một byte cho:

if((my_byte & (1 << i)) == 0){ 

} 

Tuy nhiên tôi không thể thiết lập vị trí này để 1 hoặc 0, có thể tôi?

Trả lời

109

Sử dụng bitwise orand nhà khai thác. Để thiết lập một chút:

my_byte = my_byte | (1 << pos); 

để bỏ cài đặt một chút:

my_byte = my_byte & ~(1 << pos); 
+3

xem thêm các nhà điều hành xor - đó là công cụ quyền lực thứ ba trong kho vũ khí đó (xem bài viết trên Wikipedia về mặt nạ). – Hardryv

59

Để thiết lập một chút:

myByte |= 1 << bit; 

Để xóa video đó:

myByte &= ~(1 << bit); 
+0

những gì bạn có nghĩa là điều này sẽ "thiết lập" một chút? nói rằng bạn đang cố truy cập bit thứ 0 và myByte chứa 11101101. Điều này có nghĩa là gì? Làm cách nào để kiểm soát giá trị được đặt là gì? – Michael

+3

@Michael: Thiết lập một chút có nghĩa là làm cho nó 1. Xóa một chút có nghĩa là làm cho nó 0. –

10

Các kỹ thuật mà bạn cần là để cô lập các bit chọn và thể thiết lập hoặc xóa nó. Bạn đã có biểu thức để cô lập bit vì bạn đang sử dụng nó để kiểm tra nó ở trên. Bạn có thể thiết lập bit bằng cách sử dụng nó hoặc xóa bit theo bitwise AND với phần bù của bit.

boolean setBit; 
my_byte = setBit 
      ? myByte | (1 << i) 
      : myByte & ~(1 << i); 
19

Chỉ cần để bổ sung cho Jon‘s answerdriis‘ answer

Để chuyển đổi (nghịch) một chút

myByte ^= 1 << bit; 
+0

này là sạch hơn hai hoạt động riêng biệt ... – ernesto

+1

@ernesto nhưng nó không trả lời cụ thể câu hỏi. Anh hỏi làm thế nào để thiết lập bit, không chuyển đổi nó. Có một sự khác biệt. Tất nhiên, bạn có thể kiểm tra bit đầu tiên, sau đó chuyển đổi nó nếu cần thiết, nhưng đó sẽ là 2 nhiệm vụ riêng biệt ... –

6

Vui lòng xem lớp java.util.BitSet thực hiện công việc cho bạn.

Để thiết lập: myByte.set(bit); Để thiết lập lại: myByte.clear(bit); Để lấp đầy với một bool: myByte.set(bit, b); Để có được bool: b = myByte.get(bit); Lấy bitmap: byte bitMap = myByte.toByteArray()[0];

+2

Cẩn thận với bitet. Không có sự phân biệt giữa thiết lập bit thành 0 và xóa nó, do đó 'length()' sẽ không tính các bit đó được đặt là 0 –