c++ - 这里到底发生了什么?

标签 c++ bit-manipulation bitwise-operators bitwise-and

<分区>

for (int i = 7; i >= 0;i--) {
    cout << ((c >> i) & 1);

这需要一个 char,c 并打印出它的二进制。这是如何工作的,特别是第二行。

最佳答案

它分别取位置 7 到 0 的位,即从左到右的位,并且对于每个位,写出 1 或 0。& 1 用于隔离右移 i 位后的第 i 位。

例子:

给定 char 'A',相当于二进制的 0x4101000001:

010000001 >> 7 ==> 0  ==> & 1 ==> 0
010000001 >> 6 ==> 01  ==> & 1 ==> 1
010000001 >> 5 ==> 010  ==> & 1 ==> 0
010000001 >> 4 ==> 0100  ==> & 1 ==> 0
010000001 >> 3 ==> 01000  ==> & 1 ==> 0
010000001 >> 2 ==> 010000  ==> & 1 ==> 0
010000001 >> 1 ==> 0100000  ==> & 1 ==> 0
010000001 >> 0 ==> 01000001  ==> & 1 ==> 1

关于c++ - 这里到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14677133/

相关文章:

java - Java 中的逻辑符号

c++ - C++中结构的奇怪行为

c++ - 将 vector 中的项目与 vector 中的所有项目进行比较

javascript - 为什么与1(&1)按位运算总是返回0或1

Python 列表到位运算

algorithm - 查找最长的交替字符串 1's and 0' s

c++ - 错误[P​​e167] : argument of type "uint16_t *" is incompatible with parameter of type "unsigned char *"

C++ 使用参数调用不带参数的回调 - 或者更好的解决方案

java - 如何在长的特定位置设置/取消设置?

java - Java 移位操作实现背后的逻辑