Tôi tìm thấy một thú vị bit twiddling trong "source\common\unicode\utf.h"
tập tin của thư viện ICU (thành phần quốc tế cho Unicode). Các twiddling bit được thiết kế để kiểm tra xem một số là trong một phạm vi cụ thể.Bit twiddling để kiểm tra xem một số có trong phạm vi cụ thể
// Is a code point in a range of U+d800..U+dbff?
#define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)
tôi đã tìm ra những con số kỳ diệu (0xfffffc00) đến từ:
MagicNumber = 0xffffffff - (HighBound - LowBound)
Tuy nhiên, tôi cũng nhận thấy rằng công thức không áp dụng cho tất cả các phạm vi tùy ý. Có ai ở đây biết trong hoàn cảnh nào công thức hoạt động không?
Có một chút twiddling để kiểm tra xem một số là trong phạm vi cụ thể?
Bạn có thể cung cấp bất kỳ tham chiếu nào cho "thường được viết dưới dạng" không?Cá nhân tôi tìm thấy 'a & ~ b' thay vì' a & ~ b' ít trực quan hơn và 'a & b == c' trực quan hơn' a & ~ d == e' bởi vì có ít hoạt động hơn ngay cả khi nó chỉ là sở thích cá nhân của tôi. –
Lưu ý rằng 'a & b == c' không có nghĩa là bạn có thể nghĩ nó có nghĩa là (a) (b == c)'). 'a & ~ b' giống hệt như 'a & ~ b', và tôi đồng ý rằng sau này là phiên âm tốt hơn, nếu chỉ vì đó là cách nó thường được thực hiện. –