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;
}
推荐阅读
-
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
-
获取一个数的二进制序列中所有的偶数位和奇数位, 分别输出其二进制序列
-
【C练】获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
-
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
-
获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
-
.获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
-
.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
-
获取一个数二进制序列中所有的偶数位和奇数位,并输出二进制序列。
-
一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
-
C语言获取一个数二进制所有偶数位和奇数位分别输出二进制序列