use*_*689 5 c c++ bit-manipulation
我遇到了一个棘手的位操作问题.
据我所知,保存值的最小可变大小是8位的一个字节.C/C++中可用的位操作适用于整个字节单元.
想象一下,我有一张地图用信号10000(5位)替换二进制模式100100(6位).如果来自文件的输入数据的第一个字节是10010001(8位)存储在char变量中,则其中一部分与6位模式匹配,因此将被5位信号替换为1000001(7位)的结果.
我可以使用一个掩码来操作一个字节内的位来获得最左边的位到10000(5位)的结果,但是最右边的3位变得非常难以操作.我无法移动原始数据的最右边3位以获得正确的结果1000001(7位),然后在该char变量中填充1个填充位,该变量应由下一个输入字节的第1位填充.
我想知道C/C++是否可以实际上替换长度不适合Char(1字节)变量或甚至Int(4字节)的位模式.C/C++可以做到这一点,还是我们必须使用其他处理单位操作的汇编语言?
我听说Power Basic可以比C/C++更好地进行逐位操作.
<<左移^异或>>右移~一个人的补语使用这些操作,您可以轻松隔离您感兴趣的部分并将它们作为整数进行比较。
说出该字节001000100,您想检查它是否包含1000:
char k = (char)68;
char c = (char)8;
int i = 0;
while(i<5){
if((k<<i)>>(8-3-i) == c){
//do stuff
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是非常粗略的代码,只是为了演示。