• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

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

互联网 diligentman 2周前 (04-30) 5次浏览

题目

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

思路分析

打印一个整数的二进制位中的偶数位和奇数位,可以对整数进行移位操作,再将移位的二进制位与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 的变化不同,参考奇数位的解释即可~
C语言  打印整数二进制的奇数位和偶数位C语言  打印整数二进制的奇数位和偶数位

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;
}

C语言  打印整数二进制的奇数位和偶数位
其实道理和右移操作符 方法都一样~ 只要理解左移操作符、右移操作符、按位与的原理就可以啦~


程序员灯塔
转载请注明原文链接:C语言 打印整数二进制的奇数位和偶数位
喜欢 (0)