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

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

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/80637469
今日推荐