提示:以下是本篇文章正文内容,下面案例可供参考
一、题目
二、思路
注意此思路是从左向右打印
假设我们要打印10的二进制的奇数位和偶数位,10的二进制如下
第一步
先打印偶数位:
- 确定偶数位,整数在内存中存储占四个字节,32个bit位,偶数位从第2位开始,第32位结束。
- 每次想要获取下一个偶数位,需要在原基础上-2位。
- 获取该位上的数是1还是0。我们让这个数右移与上1 ,就可以准确获取该位上是0还是1了。0&1 = 0;1&1=1。
第二步
打印奇数位
- 确定奇数位,整数在内存中存储占四个字节,32个bit位,奇数位从第1位开始,第31位结束。
- 每次想要获取下一个奇数位,需要在原基础上-2位。
- 获取该位上的数是1还是0。我们让这个数右移与上1 ,就可以准确获取该位上是0还是1了。0&1 = 0;1&1=1。
三、代码实现
从左往右打印
void Printbit(int num)
{
for(int i=31; i>=1; i-=2)
{
printf("%d ", (num>>i)&1);
}
printf("\n");
for(int i=30; i>=0; i-=2)
{
printf("%d ", (num>>i)&1);
}
printf("\n");
}
int main()
{
int i = 10;
Printbit(i);
return 0;
}
从右往左打印
void printbit(int i)
{
int n = 0;
//打印偶数位
for (n = 1; n <= 31; n+=2)
{
printf("%d ", (i >> n) & 1);
}
printf("\n");
//打印奇数位
for (n = 0; n <= 30; n += 2)
{
printf("%d ",(i >> n) & 1);
}
printf("\n");
}
int main()
{
int i = 10;
printbit(i);
return 0;
}