检查一个字符的位
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 : C
,B
求值,当 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 逻辑语句中使用,或者如果您需要值为 zero
或 one
:!!(val & (1 << n))
或 val & (1 << n) ? 1 : 0
或(val & (1 << n)) >> n
我正在尝试检查字符的一个特定位,例如第一个八位字节上的一个表情符号“”,我们有“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 : C
,B
求值,当 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 逻辑语句中使用,或者如果您需要值为 zero
或 one
:!!(val & (1 << n))
或 val & (1 << n) ? 1 : 0
或(val & (1 << n)) >> n