我在读一本书,上面写着:
要选择32位无符号整数中的所有偶数位,我们可以
位掩码为0xAAAAAAAAAA的数字,这是一个32位数字,具有
偶数位集(0xA是十进制1010二进制)选择奇数
我们可以使用位掩码0x55555555,这是一个包含所有
偶数位集(0x5是十进制50101,二进制)
我不明白的是,x或1010如何将所有偶数位设置为1如果你从零开始从右到左,很明显是设置的奇数位我错过了什么?
最佳答案
从左到右是你犯错误的地方。
看看当你真的这么做时会发生什么:
二进制32位:
your number: 1111 1111 1111 1111 1111 1111 1111 1111
Mask: 1010 1010 1010 1010 1010 1010 1010 1010
result: 1010 1010 1010 1010 1010 1010 1010 1010
第一位(从右边!!!) 是奇数,使用
0xAAAAAAAAAA
运算符将AND
用作位掩码时将不会设置只有偶数位才能被设置总是至少从有效位开始。关于c - 位掩码和选择偶数位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32608099/