ula*_*ade 2 c++ bit-manipulation bitwise-operators
假设我有一些32位整数:
000001010100010000100010001001 1 0
(倒数第二位是粗体/斜体)
所以,如果我将它向右移动2,我得到:
00000001010100010000100010001001
现在倒数第二位丢失了.我想过存储原始值然后使用|| (逻辑或),但只有在倒数第二位设置为1时才会起作用.如果它为0怎么办?
你想要按位,而不是逻辑或; 要保留该值,您需要在插入旧值之前清除新值中的位:
uint32_t const shift = 2; // number of bits to shift by
uint32_t const mask = (1 << 1); // set of bits to preserve
uint32_t bit_to_save = value & mask;
value >>= shift;
value &= ~mask;
value |= bit_to_save;
Run Code Online (Sandbox Code Playgroud)
或者,如果你喜欢简洁:
value = ((value >> shift) & ~mask) | (value & mask);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |