C语言 打印整数二进制的奇数位和偶数位

题目

获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列

思路分析

打印一个整数的二进制位中的偶数位和奇数位,可以对整数进行移位操作,再将移位的二进制位与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;
}

在这里插入图片描述
其实道理和右移操作符 方法都一样~ 只要理解左移操作符、右移操作符、按位与的原理就可以啦~

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一朵花花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值