bất cứ ai có thể vui lòng giải thích cách thức hoạt động (asz + 7) & ~ 7; Nó làm tròn asz thành bội số cao hơn tiếp theo của 8.Bit Hack - Làm tròn cho nhiều người trong số 8
Thật dễ dàng để thấy rằng ~ 7 tạo ra 11111000 (đại diện 8 bit) và do đó tắt 3 bit cuối cùng, do đó bất kỳ số nào được tạo ra là bội số của 8
Câu hỏi của tôi là cách thêm asz lên 7 trước khi tạo mặt nạ [chỉnh sửa] tạo ra [số cuối cùng] cao hơn tiếp theo của 8? Tôi đã cố gắng viết nó ra giấy
như:
1 + 7 = 8 = 1|000 (& ~7) -> 1000
2 + 7 = 9 = 1|001 (& ~7) -> 1000
3 + 7 = 10 = 1|010 (& ~7) -> 1000
4 + 7 = 11 = 1|011 (& ~7) -> 1000
5 + 7 = 12 = 1|100 (& ~7) -> 1000
6 + 7 = 13 = 1|101 (& ~7) -> 1000
7 + 7 = 14 = 1|110 (& ~7) -> 1000
8 + 7 = 15 = 1|111 (& ~7) -> 1000
Một mô hình dường như rõ ràng xuất hiện mà đã được khai thác .Can ai vui lòng giúp tôi nó ra?
Cảm ơn tất cả vì câu trả lời. Nó giúp xác nhận những gì tôi đang nghĩ. Tôi tiếp tục viết các mô hình trên và khi tôi vượt qua 10, tôi có thể thấy rõ ràng rằng các nos được thúc đẩy để tiếp theo "khối 8" nếu tôi có thể nói như vậy.
Xin cảm ơn một lần nữa.
làm tròn một số nguyên n xuống bất kỳ số nguyên m nào có thể đạt được với '(n/m) * m' –
' & ~ 'bit chỉ hoạt động nếu roundTo là một sức mạnh của 2. Nói chung bạn cần' return ((giá trị) + roundTo - 1)/roundTo) * roundTo; 'thay thế. –
@GregRogers, bạn có bất kỳ ý tưởng làm thế nào đắt tiền một hướng dẫn phân chia là? – Johan