欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言:.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

程序员文章站 2022-07-14 23:41:49
...
# include <stdio.h>
# include <stdlib.h>
int main()
{
	int num = 0;
	int i = 0;
	scanf_s("%d", &num);
	printf("奇数位为:");
	for (i = 31; i>= 0; i=i-2)//也是控制32次(每个整型数按32位来算),只是从31位开始移动
	{
		num = (num >> i) & 1;//第一次向右移动31位和1与得到第一位情况,每次变化2位,即可得到奇数位情况
		printf("%d ", num);
	}
	printf("\n");
	printf("偶数位为:");
	for (i = 30; i >= 0; i = i - 2)//向右移动30位,再与1所得结果是原来数字的第二位,再移28位。。。
	{
		num = (num >> i) & 1;
		printf("%d ", num);
	}
	printf("\n");
	system("pause");
	return 0;
}

这个程序打眼一看,是对的,但是实际上进行for循环时,改变了循环内部的循环体变量,所以导致程序结果出错,正确的做法是应该定义一个临时变量,防止循环体变量的改变,正确的代码如下:

# include <stdio.h>
# include <stdlib.h>
int main()
{
	int num = 0;
	int i = 0;
	int tmp;
	scanf_s("%d", &num);
	printf("奇数位为:");
	for (i = 31; i >= 0; i = i - 2)//也是控制32次(每个整型数按32位来算),只是从31位开始移动
	{
		tmp = (num >> i) & 1;//第一次向右移动31位和1与得到第一位情况,每次变化2位,即可得到奇数位情况
		printf("%d ", tmp);
	}
	printf("\n");
	printf("偶数位为:");
	for (i = 30; i >= 0; i = i - 2)//向右移动30位,再与1所得结果是原来数字的第二位,再移28位。。。
	{
		tmp = (num >> i) & 1;
		printf("%d ", tmp);
	}
	printf("\n");
	system("pause");
	return 0;
}