#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*
思路:
1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0
2. 以同样的方式提取偶数位置
3. 注意提取奇偶位,如9,打印结果应为
0000000000000001 - 偶数位
0000000000000010 - 奇数位
4. 右移是算术位移的前提下,算术位移即和左移一致
0000 0000 0000 0000 0000 0000 0000 1001 - 9
0000 0000 0000 0000 0000 0000 0000 0000 - 0(右移31位)
0000 0000 0000 0000 0000 0000 0000 0001 - 1&0
0000 0000 0000 0000 0000 0000 0000 0000 - 0
结果为0,故第31个比特位是0
0000 0000 0000 0000 0000 0000 0000 1001 - 9
0000 0000 0000 0000 0000 0000 0000 0100 - 0(右移1位)
0000 0000 0000 0000 0000 0000 0000 0001 - 1&0
0000 0000 0000 0000 0000 0000 0000 0000 - 0
结果为0,故第1个比特位是0
检测num中某一位是0还是1的方式:
1. 将num向右移动i位
2. 将移完位之后的结果与1按位与,如果:
结果是0,则第i个比特位是0
结果是非0,则第i个比特位是1
*/
int main()
{
int num = 9;
//打印奇数位
for (int i = 31; i >= 1; i -= 2)//i=31输入,和常见的i=0有区别
{
printf("%d ", (num >> i) & 1);//32个bit位
}
printf("\n");
//打印偶数位
for (int i = 30; i >= 0; i -= 2)
{
printf("%d ", (num >> i) & 1);
}
printf("\n");
}
08-01
497
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)