使用按位运算符提取位

时间:2011-12-07 00:32:00

标签: c bit-manipulation

我正在尝试学习如何在给定输入上使用按位运算符,但是没有太多运气弄清楚如何使用它们。

假设我有以下八位字节:

11(01)0000

如何在大括号之间提取位?

2 个答案:

答案 0 :(得分:6)

你需要:

  1. 创建一个合适的掩码,只有你需要的字节在哪里(你只需要用二进制编写数字并转换成例如hex,将它放在C程序中)。 11(01)0000中的括号表示将这些括号放在面具中。

    或者,创建一个由您感兴趣的比特块组成的掩码(在您的情况下为两个,即二进制11,即十进制的3和左移它将它移动到你需要它的位置(左移操作符:<<)。如果仅在运行时知道“位窗口”的位置,则此方法非常有用。

  2. 在您的号码和掩码之间执行按位和操作(按位和运算符为&)。

    按位并且只留下两个操作数中为1的位为1,因此效果是使用掩码的位“过滤”源编号:只有与掩码中的位相对应的位才“流过“它,所有其他位都保留为零。

  3. 现在您已经提取了您感兴趣的位,但它们仍然在数字内部的原始位置。如果你想要/需要它,你可以右移它们“将它们对齐”(使用右移操作符:>>)。

答案 1 :(得分:1)

使用您要选择的位掩盖您的值,然后移位。

如果你的11010000号码是x,你想要的两位数是

(x & 0x30 ) >> 4