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 的变化不同,参考奇数位的解释即可~
C语言 打印整数二进制的奇数位和偶数位_第1张图片C语言 打印整数二进制的奇数位和偶数位_第2张图片

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语言 打印整数二进制的奇数位和偶数位_第3张图片
其实道理和右移操作符 方法都一样~ 只要理解左移操作符、右移操作符、按位与的原理就可以啦~

你可能感兴趣的:(C,c语言)