Tôi đang chuẩn bị cho một cuộc phỏng vấn bằng văn bản, "Cracking the Coding Interview" của Gayle Laakman McDowell. Trên phần bao gồm thao tác bit, có hai chức năng được cung cấp, nhưng tôi không hoàn toàn hiểu cách nó hoạt động.thao tác bit: phạm vi thanh toán bù trừ của các bit
// To clear all bits from the most significant bit through i (inclusive), we do:
int clearMSBthroughI(int num, int i) {
int mask = (1 << i) - 1;
return num & mask;
}
// To clear all bits from i through 0 (inclusive), we do:
int clearBitsIthrough0(int num, int i) {
int mask = ~(((1 << (i+1)) - 1);
return num & mask;
}
Trong chức năng đầu tiên, tôi hiểu những gì (1 << i)
làm tất nhiên, nhưng những gì tôi không chắc chắn của là cách trừ đi 1 từ giá trị này ảnh hưởng đến các bit (ví dụ: (1 << i) - 1)
).
Tôi về cơ bản có cùng sự nhầm lẫn với hàm thứ hai. Đối với những hiệu ứng nào, cụ thể trên các bit, trừ trừ 1 từ ((1 << (i+1))
có? Từ sự hiểu biết của tôi, ((1 << (i+1))
kết quả trong một bit "trên" duy nhất, được dịch chuyển sang bên trái i + 1 lần - điều nào trừ đi điều này bằng 1 làm?
Cảm ơn và tôi hy vọng điều này đã rõ ràng! Vui lòng cho tôi biết nếu có bất kỳ câu hỏi nào khác.
Đối với những người có cơ hội có văn bản tôi đang tham chiếu, thì đó là trang 91 trong ấn bản thứ năm.
đọc [này] (http://stackoverflow.com/questions/15729765/why-does-the-output-of-applied-on-a -negative-number-is-filled-with-ones-on-th) và câu trả lời này [http://stackoverflow.com/questions/15708493/what-is-the-meaning-of-this-declaration) –