c - 在此代码中如何访问各个位?

标签 c

所以我看到这段代码打印出了任何数字的各个位。我不明白为什么访问各个位而不是整个数字本身

#include <stdio.h>
int main()
{
    int x=10, b;   
    for(b=0; x!=0; x>>=1) {
        printf("%d:%d\n", b, (x&1));
        b++;   
    }
}

输出:

0:0 
1:1 
2:0 
3:1 

请帮我理解这段代码。

最佳答案

在您的代码中,您正在以二进制形式打印 X 变量的值。为此,您的代码使用逻辑运算作为 AND 运算符和右移。

在循环条件中,将 X 变量向右移动一位。

 for b = 0 you get x = 1010  
 for b = 1 you get x = 101  
 for b = 2 you get x = 10  
 for b = 3 you get x = 1

然后,在打印中显示循环迭代器 (b) 和 X 变量 AND 1。

AND 运算符获取以下值:

0 AND 0 = 0   
0 AND 1 = 0  
1 AND 0 = 0  
1 AND 1 = 1

就您而言,您有:

1010 AND (000)1 = 0  
101 AND (00)1 = 1  
10 AND (0)1 = 0  
1 AND 1 = 1

关于c - 在此代码中如何访问各个位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057735/

相关文章:

c - 从c中的标准输入读取十六进制

C 服务器奇怪的行为

C 下标值不是数组、指针或 vector - 是吗?

C 赋值数组错误

c - 发送以太网数据包时额外填充?

c - 为什么这段代码只返回我的数据集中的每隔一个坐标?

c - 我应该编写一个程序来对结构数组进行排序,但我不知道这样做

c - 如何对 float 进行四舍五入精确到小数点后两位?

将地址传递给数组而不是数组会导致问题吗?

在此 C 编程案例中,C99 命令行不打印任何内容