【发布时间】:2015-12-13 00:15:13
【问题描述】:
我正在读一本书,上面写着:
要选择 32 位无符号整数中的所有偶数位,我们可以将 位掩码为 0xAAAAAAAAAA 的数字,它是一个 32 位数字 偶数位设置(0xA 是十进制 10、1010 二进制)。用于选择奇数 我们可以与位掩码 0x5555555555 与位,这是一个与所有 偶数位设置(0x5 为十进制 5,0101 为二进制)
我不明白 0x 或 1010 如何将所有偶数位设置为 1。如果您从零开始从右到左,显然是奇数位被设置。我错过了什么?
【问题讨论】:
-
"如果你从左到右" 那是你的问题。数字从右侧开始,向左增加值。我可以在左边附加一个零,它可能是完全相同的数字。
-
哎呀,这是一个错字。我的意思是从右到左。例如1010中最右边的位(index-0)是0(偶数),index-1位(奇数)是1,index-2位(偶数)是0。例如index-2位是偶数,它应该设置为 1,但它为零。这就是我的意思。
-
这取决于您的观点,第一位(LSB)是数字0还是数字1?传统上它是 0,它非常适合 C 中从零开始的所有其他内容,但它与所有传统编号方式背道而驰。
-
位 0 是最右边的位,或 LSb(注意:小“b”)。
-
位从位 0 及以上枚举。它们不是从 1 起枚举的。所以你的书是不正确的,奇数需要 0xA 掩码,偶数需要 0x5 掩码。
标签: c bit-manipulation