Để xóa bất kỳ tập hợp các bit, bạn có thể sử dụng toán tử AND với sự bổ sung của một số có 1s trong những nơi đó. Trong trường hợp của bạn, vì số lượng 0xFFFF có thấp hơn 16 bit của nó được thiết lập, bạn có thể và với sự bổ sung của nó:
b &= ~0xFFFF; // Clear lower 16 bits.
Nếu bạn muốn thiết những bit, bạn thay vì có thể sử dụng một Bitwise OR với một con số đó đã những bit thiết lập:
b |= 0xFFFF; // Set lower 16 bits.
Và, nếu bạn muốn lật những bit, bạn có thể sử dụng một XOR Bitwise với một con số đó có những bit thiết lập:
b ^= 0xFFFF; // Flip lower 16 bits.
Hy vọng điều này sẽ hữu ích!
Điều này thực sự tốt vì nó hoạt động với các giá trị 16 và 64 bit, nếu tôi không nhầm. –
@Ray - tại sao phải không? – James
@ James- Nếu bạn cố gắng làm một cái gì đó như 'b & 0xFFFF0000' trên một máy không 32 bit (ví dụ, một máy 64-bit), sau đó điều này có thể vô tình kết thúc thanh toán bù trừ 32 bit cao, thêm vào thấp 32 bit. – templatetypedef