一、打印整数(32位)二进制的奇数位和偶数位
二、代码
c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 打印整数(32位)二进制的奇数位和偶数位
// 规则:位编号从 低位(0) ~ 高位(31)
// 偶数位:0、2、4、6 ... 30 位
// 奇数位:1、3、5、7 ... 31 位
//-------------------------------------------
// 方法1:双循环分别打印(逻辑简单)
//-------------------------------------------
void print1(int num)
{
int i = 0;
// 打印偶数位(0、2、4、6 ... 30)
printf("方法1-偶数位(0、2、4...30位)为:");
for (i = 0; i < 32; i += 2) // 每次+2,只遍历偶数位
{
// 取出第 i 位,打印
printf("%d ", (num >> i) & 1);
}
printf("\n");
// 打印奇数位(1、3、5、7 ... 31)
printf("方法1-奇数位(1、3、5...31位)为:");
for (i = 1; i < 32; i += 2) // 每次+2,只遍历奇数位
{
printf("%d ", (num >> i) & 1);
}
printf("\n");
}
//-------------------------------------------
// 方法2:单循环实现(更高效写法)
//-------------------------------------------
void print2(int num)
{
// 定义两个数组,分别存储 偶数位、奇数位
int even[16] = { 0 }; // 偶数位:共16位
int odd[16] = { 0 }; // 奇数位:共16位
int i = 0;
int e = 0, o = 0; // 数组下标
// 只用 1 个循环遍历 32 位
for (i = 0; i < 32; i++)
{
// 取出第 i 位的值(0 或 1)
int bit = (num >> i) & 1;
// 判断当前位是偶数位还是奇数位
if (i % 2 == 0)
{
even[e++] = bit; // 偶数位存入 even 数组
}
else
{
odd[o++] = bit; // 奇数位存入 odd 数组
}
}
// 打印偶数位结果
printf("方法2-偶数位(0、2、4...30位)为:");
for (i = 0; i < 16; i++)
{
printf("%d ", even[i]);
}
printf("\n");
// 打印奇数位结果
printf("方法2-奇数位(1、3、5...31位)为:");
for (i = 0; i < 16; i++)
{
printf("%d ", odd[i]);
}
printf("\n");
}
//-------------------------------------------
// 主函数
//-------------------------------------------
int main()
{
int num;
// 提示输入整数
printf("请输入一个整数:\n");
scanf("%d", &num);
// 调用方法1:双循环打印
print1(num);
printf("\n");
// 调用方法2:单循环打印
print2(num);
return 0;
}
三、运行结果
