c上的位解析程序

dev*_*vnp 1 c

我试图确定我可以用来解析字节的特定位的逻辑,我想检查它是否已设置,如果它只是移动到特定的代码行.我应该能够对二进制值执行AND或OR运算,但是再次如果位的位置是3或其他位置然后是MSB和LSB,我将无法在代码中使用true或false条件,而是我将不得不起诉值与AND或OR操作的比较.

例如,如果AND操作是00100000,那么我将不得不将它与00100000进行比较并执行条件语句.

Jon*_*ler 6

如果要测试一个字节的 N 位(对于正常的8位字节,N = 0..7),您可以使用:

if (byte & (1 << N))
    ...Nth bit is set...
Run Code Online (Sandbox Code Playgroud)

测试条件只检查表达式是0(假)还是非零(真).您可以通过以下方式明确说明:

if ((byte & (1 << N)) != 0)
    ...Nth bit is set...
Run Code Online (Sandbox Code Playgroud)

你可以设定该N 具有位:

byte |= 1 << N;
Run Code Online (Sandbox Code Playgroud)

您可以重置(零)的N个带位:

byte &= ~(1 << N);
Run Code Online (Sandbox Code Playgroud)

您可以翻转或切换的N个带位:

byte ^= (1 << N);
Run Code Online (Sandbox Code Playgroud)

虽然我已经使用了byte整个名称,但只要您的班次在正确的范围内,您就可以使用任何整数类型的任何位.