检查一个字符的位

Check the bit of a char

我正在尝试检查字符的一个特定位,例如第一个八位字节上的一个表情符号“”,我们有“11110xxx”,我需要检查第 3 位是否为 0,但我不知道怎么办!

我从互联网上得到一些代码,例如:

printf( "%d", ( buffer[0] >> 3 ) & 1 ? 1 : 0);

它有效,但我试过这个:

printf("%d", (buffer[0] >> 3) & 1);

并且有效,但没有 & 1 则无效: 所以我想知道它是什么:

? 1 : 0 //Works without

及其工作所需的& 1

另一件事是,我从右移到左还是从左移到右?我试过这个:

printf("%d", (buffer[0] << 3) & 1);

但是不起作用。

我正在尝试学习如何使用字节

? 1 : 0是三元运算符的后半部分。当 A 为真(非零)时,写 A ? B : CB 求值,当 A 为假(零)时,求值 C

& 1 是按位与运算符和一。它通过使用 AND 和一个来提取最后一位(LSB)。

如果您想使用从右到左的移位,可以将其应用于 1

printf("%d", buffer[0] & (1 << 3) ? 1 : 0);

And works to, but without the & 1 doesn't.

因为& 1将除低位以外的所有位都设置为零。示例:0xff >> 3 == 0x1f(0xff >> 3) & 1 == 1.

2.

Another thing its, with that I shifted from right to left or left to right? I tried this:

printf("%d", (buffer[0] << 3) & 1);

当您向左移动时,最低位设置为零。因此 & 1 的结果将始终为零(如第 1 点所述)。

通常,如果您想检查第 n 位是否已设置,您可以:

(val >> n) & 1

val & (1 << n) - 如果在 if 逻辑语句中使用,或者如果您需要值为 zeroone!!(val & (1 << n))val & (1 << n) ? 1 : 0(val & (1 << n)) >> n