Rất nhiều câu trả lời ở đây mô tả những gì cơ khí này cho phép bạn làm, nhưng không phải lý do tại sao bạn sẽ muốn sử dụng nó. Đây là lý do tại sao.
phiên bản ngắn:
ký hiệu này giúp khi tương tác với các thành phần khác và giao tiếp với các kỹ sư khác vì nó sẽ cho bạn biết một cách rõ ràng những gì bit trong một từ đang được bộ hoặc rõ ràng thay vì che khuất thông tin mà bên trong một giá trị số.
Vì vậy, tôi có thể gọi cho bạn trên điện thoại và nói "Xin chào, bạn muốn mở tệp ?" Và bạn sẽ nói, "Bit 0". Và tôi sẽ viết mã của tôi open = 1 << 0
. Vì số ở bên phải của <<
cho bạn biết số bit.
.
phiên bản Long:
Theo truyền thống bit trong một từ được đánh số từ phải sang trái, bắt đầu từ số không. Vì vậy, bit ít quan trọng nhất là bit số 0 và bạn đếm ngược khi bạn đi về phía bit quan trọng nhất. Có một số benefits để ghi nhãn các bit theo cách này .
Một lợi ích là bạn có thể nói về cùng một bit bất kể kích thước từ. Ví dụ: tôi có thể nói rằng trong cả từ 32 bit 0x384A và từ 8 bit 0x63, các bit 6 và 1 được đặt. Nếu bạn đánh số bit theo một hướng khác, bạn không thể làm điều đó.
Một lợi ích khác là giá trị của bit chỉ đơn giản là 2 được nâng lên công suất của vị trí bit . Ví dụ: nhị phân 0101
có bit 2 và 0 được đặt. Bit 2 đóng góp giá trị 4 (2^2)
vào số và bit 0 đóng góp giá trị 1 (2^0). Vì vậy, giá trị của số là tất nhiên 4 + 1 = 5.
Lời giải thích nền dài đó đưa chúng ta đến điểm: Ký hiệu <<
cho bạn biết số bit chỉ bằng cách nhìn vào nó.
Số 1 trong bảng sao kê 1 << n
chỉ đơn giản là một bit đặt ở vị trí bit 0. Khi bạn chuyển số đó sang trái, bạn sẽ di chuyển bộ đó bit đến vị trí khác trong số. Thuận tiện, số tiền bạn thay đổi cho bạn biết số bit sẽ được đặt.
1 << 5: This means bit 5. The value is 0x20.
1 << 12: This means bit 12. The value is 0x40000.
1 << 17: This means bit 17. The value is 0x1000000.
1 << 54: This means bit 54. The value is 0x40000000000000.
(You can probably see that this notation might be helpful if
you're defining bits in a 64-bit number)
Ký hiệu này thực sự hữu ích khi bạn đang tương tác với một thành phần khác để đăng ký phần cứng. Giống như bạn có thể có thiết bị bật khi bạn viết thành bit 7. Vì vậy, kỹ sư phần cứng sẽ viết một bảng dữ liệu cho biết bit 7 cho phép thiết bị. Và bạn muốn viết trong mã của bạn ENABLE = 1 << 7
. Dễ dàng như vậy.
Oh shoot. Kỹ sư vừa gửi một thông báo lỗi đến biểu dữ liệu nói rằng đó là được cho là bit 15, không chút 7. OK, chỉ cần thay đổi mã thành ENABLE = 1 << 15
.
Điều gì xảy ra nếu ENABLE
thực sự xảy ra khi cả hai bit 7 và 1 được đặt cùng một lúc?
ENABLE = (1 << 7) | (1 << 1)
.
Ban đầu có vẻ lạ và khó hiểu, nhưng bạn sẽ quen với nó. Và bạn sẽ đánh giá cao nếu bạn cần biết rõ số bit của thứ gì đó.
Tôi không biết ai sẽ bỏ phiếu để đóng, nhưng đây không phải là câu hỏi "chủ yếu dựa trên ý kiến". Đó là một câu hỏi kỹ thuật hỏi cụ thể mục đích của << << 'là gì trong kịch bản này. –
@GrantWinney (không phải phiếu bầu của tôi) nhưng tôi thấy nó "dựa trên ý kiến" bởi vì câu hỏi về cơ bản là "tại sao ai đó sử dụng' 1 << 2' khi '0x04' dễ đọc hơn * đối với tôi *". –
Tôi chưa bao giờ nói 0x04 dễ đọc hơn và tôi cũng không so sánh cả hai. Mục đích của câu hỏi là hiểu các tác dụng phụ của câu lệnh này (= có thể kết hợp cờ) – JSBach