C语言学习笔记20260603-打印整数(32位)二进制的奇数位和偶数位(2种方法)

一、打印整数(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;
}

三、运行结果

相关推荐
敬往事一杯酒哈19 小时前
海康 AGV 导航读码器学习
学习
沐晓时光20 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
qq_2842740521 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
SuperByteMaster21 小时前
wfi进入之前没有清除basepri, 导致中断优先级不够,wfi 退不出来
c语言
qq_284274051 天前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Navigator_Z1 天前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
Titan20241 天前
MySQL访问个人学习笔记
笔记·学习·mysql
小雪崩1 天前
嵌入式学习 day64:字符设备驱动
学习
深圳老胡1 天前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
个 人 练 习 生1 天前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生