题目
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
思路分析
打印一个整数的二进制位中的偶数位和奇数位,可以对整数进行移位操作,再将移位的二进制位与1进行&操作。二进制的序列在计算机的存储中有32位,故在不考虑负数的符号位的情况下,奇数位和偶数位分别有16个。对奇数和偶数分别进行讨论~~
代码实现
1.方法一 右移操作符实现
右移操作符,最高位是补符号位,但是此题不影响,因为循环里,每次都是判断的最低的那一位,在有些题中,右移操作符 一定要小心使用~一不小心就会出问题
int main() {
int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
printf("奇数位:");
for (int i = 31; i >= 1; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
printf("偶数位:");
for (int i = 30; i >= 0; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
system("pause");
return 0;
}
直接上图叭,就更清晰直观一些~~
偶数位和奇数位一样,就是循环变量 i 的变化不同,参考奇数位的解释即可~
2.方法二 左移操作符实现
int main() {
int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
printf("奇数位:");
for (int i = 31; i >= 1; i -= 2) {
if (num & (1 << i)) {
printf("%d ",1);
}
else {
printf("%d ", 0);
}
}
printf("\n");
printf("偶数位:");
for (int i = 30; i >= 0; i -= 2) {
if (num & (1 << i)) {
printf("%d ", 1);
}
else {
printf("%d ", 0);
}
}
printf("\n");
system("pause");
return 0;
}
其实道理和右移操作符 方法都一样~ 只要理解左移操作符、右移操作符、按位与的原理就可以啦~