我的想法是创建两个数组分别来接受奇数和偶数,再用一个for循环实现代码的录入
结果如下
int main()
{
int a = 0;
scanf("%d", &a);
int odd[16] = { 0 };
int even[16] = {0};
int i = 0;
for (i = 1; i <=32; i--)
{
int tmp = 0;
if (i % 2 == 0)
{
tmp = a % 2;
even[(i / 2-1)] = tmp;
a /= 2;
}
else
{
tmp = a % 2;
odd[(i / 2)] = tmp;
a /= 2;
}
}
int j = 0;
for (j = 0; j < 16; j++)
{
printf("%d", odd[j]);
}
printf("\n");
int r = 0;
for (r = 0; r < 16; r++)
{
printf("%d", even[r]);
}
return 0;
}
怎么说呢,任务确实完成了,但最后的表现形式让我不是很满意
比如我要实现对9这个数的这样一个操作
结果会是
1000000000000000
0100000000000000
很奇怪,因为这两个1都是低位的
虽然我写的代码能完成功能实属不易
但我感觉不太好这个代码
突然发现只要改动一点点就可以改进这个问题
即在将奇偶数位输入到数组时分别用15减去原来的那个下标表达式
结果如下
int main()
{
int a = 0;
scanf("%d", &a);
int odd[16] = { 0 };
int even[16] = {0};
int i = 0;
for (i = 1; i <=32; i++)
{
int tmp = 0;
if (i % 2 == 0)
{
tmp = a % 2;
even[15-(i / 2-1)] = tmp;
a /= 2;
}
else
{
tmp = a % 2;
odd[15-(i / 2)] = tmp;
a /= 2;
}
}
int j = 0;
for (j = 0; j < 16; j++)
{
printf("%d", odd[j]);
}
printf("\n");
int r = 0;
for (r = 0; r < 16; r++)
{
printf("%d", even[r]);
}
return 0;
}
至此我完成了对自己的救赎
但其实获得一个数的最低位的方法不止a%2
还可以与1按位与
于是下面是网课老师的解法
void print(int m)
{
int i = 0;
printf("奇数位:\n");
for (i = 30; i >= 0; i -= 2)
{
printf("%d", (m >> i) & 1);
}
printf("\n");
int j = 0;
printf("偶数位:\n");
for (j = 31; j >= 1; j -= 2)
{
printf("%d", (m >> j) & 1);
}
}
int main()
{
int m = 0;
scanf("%d", &m);
print(m);
return 0;
}
其实我感觉两种方法差不太多,但下面的确实精简一点,同时还运用了函数,可以让代码层次更加清晰
小白上路,如有错误,还望指正