我正在尝试学习如何在给定输入上使用按位运算符,但我不太幸运地弄清楚如何使用它们。
假设我有以下八位字节:
11(01)0000
我如何提取大括号之间的位?
你需要:
-
仅在您需要的字节处创建一个合适的掩码(您只需以二进制形式写入数字并转换为例如十六进制以将其放入 C 程序中)。你的括号里的11(01)0000
是您将面罩放在何处的指示。
或者,创建一个由与您感兴趣的位块一样多的位组成的掩码(在您的情况下是两个位,即两个位)。11
以二进制表示,即3
以十进制表示)并左移将其移动到您需要的位置(左移运算符:<<
)。如果“位窗口”的位置仅在运行时已知,则此方法可能很有用。
-
在数字和掩码之间执行按位与运算(按位与运算符是&
).
按位且仅将两个操作数中均为 1 的位保留为 1,因此效果是使用掩码的位“过滤”源数字:仅让与掩码中的位相对应的位“流过”它,所有其他位都保留为零。
-
现在您已经提取了您感兴趣的位,但它们仍然位于数字内的原始位置。如果您想要/需要它,您可以将它们右移以“将它们向右对齐”(使用右移运算符:>>
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)