题目
打印整数二进制的奇数位和偶数位
代码逻辑和思路
本题是要打印数的二进制的奇数位以及偶数位。
二进制的每一位要么是1,要么是0.我们可以通过左移操作符(<<)或者右移操作符(>>),来访问到二进制的每一位数字。因为二进制一共有32位,我们可以通过右移操作符(>>)来访问每一位,然后,右移操作符会在左边补符号位,右边的话上一次判断打印过的,会变移走,所以可以不断打印每一位二进制数。我们只要控制好循环的次数,利用两个奇数之间相差2.将每次循环语句写成i=i-2。就可以只访问奇数位。同理,可以只访问偶数位。
代码
#include<stdio.h> int main() { int a; scanf_s("%d", &a); printf("奇数位:"); for (int i = 31; i >> 1; i = i - 2) { printf("%d ", (a >> i) & 1); } printf("\n"); printf("偶数位:"); for (int i = 30; i >> 1; i -= 2) { printf("%d ", (a >> i) & 1); } return 0; }
这里值得一提的是:(a>>i)&1,这里比较难理解,&这个操作符,有0为0,双一为1,如果二进制是0,就刚好打印0,如果是1,刚好打印1.
运行结果