2010-07-06 32 views
5

thời gian gần đây tôi thấy một câu hỏi phỏng vấn yêu cầu sau đây:Phỏng vấn: Flipping Bits

Cho một số 32 bit, hãy viết giả mã để lật thứ hai bit cuối cùng

là gì là tốt nhất/cách dễ nhất để làm điều này?

+0

@Ether Điều này chắc chắn không phải là thứ gì đó lạ lùng. Đây là cách sử dụng cơ bản nhất của XOR. Do đó, điều này không liên quan gì đến câu hỏi khác, đó là về việc sử dụng thao tác bit phức tạp. – Alderath

+0

Có thể người phỏng vấn đang tìm kiếm một câu hỏi tiếp theo về việc liệu bạn có đang làm việc với một đại diện lớn hay nhỏ về cuối cùng hay một thứ gì đó dọc theo những dòng đó. – NealB

Trả lời

8
#define MASK 0x00000002

mới = cũ^MASK

3

Dành riêng Hoặc với 2. Ví dụ i = i^2

3
a = 0x80000000; // the second last bit set 
if(i & a == 0) // not set in i -> set it 
    i |= a; 
else // set -> un-set it in i 
i &= ~a; 

chỉnh sửa: arg, tất nhiên bạn có thể XOR nó :-) Nhưng 2 là bit thứ hai không phải là bit cuối cùng thứ hai. Có lẽ tốt hơn để nói về MSB và LSB.

5
X^(1<<n) will toggle the state of nth bit in the number X. 
6

Tôi thấy một số câu trả lời giải thích "bit cuối cùng" là MSB, một số khác là LSB. Có lẽ họ đang tìm kiếm các ứng cử viên đủ thông minh để tạm dừng và yêu cầu làm rõ trước khi cranking ra mã. Điều đó rất quan trọng trong công việc thực tế.

+1

+1 điểm tuyệt vời –