(số) & (-số)
Nó có nghĩa là gì? Tôi đã tìm kiếm nhưng không thể tìm thấy ý nghĩa
Tôi muốn sử dụng vòng lặp for tôi & (-i)
,例如:
vì (i = 0; tôi <= n; tôi += i & (-i))
Giả sử phần bù 2 (hoặc Tôi
không được ký tên),-i
等于 ~tôi+1
.
tôi & (~i + 1)
đang khai thác Tôi
Thủ thuật bit cài đặt thấp nhất.
Điều này hoạt động vì những gì +1 thực sự làm là đặt bit rõ ràng thấp nhất và xóa tất cả các bit bên dưới mức đó. Vì vậy, trong Tôi
Và ~tôi+1
Bit duy nhất được đặt trong là Tôi
Bit được đặt thấp nhất trong (tức là bit bị xóa thấp nhất trong ~tôi
ở giữa). bên dưới nó là~tôi+1
được xóa trongTôi
Và~tôi
không bằng nhau.
Trừ khi thân vòng lặp được sửa đổi Tôi
, nếu không thì có vẻ lạ khi sử dụng nó trong một vòng lặp, bởi vì tôi = tôi & (-i)
là một phép toán bình thường: thực hiện nó hai lần sẽ cho kết quả như nhau.
[Chỉnh sửa: Trong một nhận xét ở nơi khác, bạn đã chỉ ra rằng mã thực sự là tôi += tôi & (-i)
. Vì vậy, đối với khác không Tôi
Chức năng là để xóa Tôi
tập hợp các bit được đặt thấp nhất và đặt bit rõ ràng tiếp theo ở trên nó, ví dụ: 101100 -> 110000.Tôi
Không có bit rõ ràng nào phía trên bit được đặt thấp nhất (bao gồm cải = 0
), tập hợp nàoTôi
là 0. Vậy nếu không phải vì Tôi
từ 0
Ban đầu, mỗi vòng lặp sẽ Tôi
Tăng Ít nhất Hai lần rất giống với vòng lặp trước, đôi khi nhiều hơn, cho đến khi vượt quá n
và phá vỡ hoặc đi đến 0
Và lặp lại mãi mãi.
Viết mã như thế này mà không có bình luận nói chung là không thể tha thứ được, nhưng tùy thuộc vào miền vấn đềkhả thiĐây là một chuỗi giá trị tuần hoàn "rõ ràng". ]
Tôi là một lập trình viên xuất sắc, rất giỏi!