前言
编程起因
最近刚学位操作符以及二进制码的相关知识,于是想出了打印二进制的奇数位和小数位这道题加深一下自己对于这方面的理解。
项目介绍
设计了一个打印二进制奇数位和偶数位数值功能的项目。
设计思路
1.整体逻辑
与原来设计Count_1()
函数的原理相同,都是通过对数值二进制码的二进制位进行移动来达到最后一位变成想要判断的位置的目的,不同的是该函数虽然也是for()
循环结构,但是是循环的变量始终都是针对原二进制码的,不随二进制码的每次移位而发生变化(当然如果设置循环次数还是32,第一位给到一个储存奇数位数组,第二位给到一个储存偶数位数组,再把它们分两行分别输出出来,也是可以做到这一点的,只不过这种做法会明显负杂得多)的for (int bits = 30; bits >= 0; bits -= 2)
以及for (int bits = 31; bits >= 1; bits -= 2)
结构,这里打破了一点思维定式,for()
循环中的调整部分(第三项)可以不是自增或者自减符,只要是一个C语句就行,甚至可以是函数,其实初始化部分也是如此,唯独一定对应的只有判断部分,for()
中的第一和最后一位的名字只不过是根据它们大部分情况下的作用所起的名字,实际上真正对应名字的只有第二位,本质上也就是for()
和三语句只是控制了循环执行这三条语句的顺序而已,以及只给第二条语句增加了对应名字的每个循环都要有的判断条件的功能。
2. 具体逻辑
与代码展示中的逻辑相同这里不作过多解释
代码展示
#include <stdio.h>
int main()
{
int num = 0;
printf("Please enter a number:");
scanf("%d", &num);
printf("The binary sequence of odd digits in this number:\n");
for (int bits = 30; bits >= 0; bits -= 2)//奇数位的打印(通过遍历不同的偶数形式
//的二进制位个数来使每一次该数对应的二
//进制码的最后一位都是奇数位的二进制位)
{
printf("%d ", (num >> bits) & 1);//先通过右移操作符让表达式产生一个移位后对
//应的二进制码,在和前文设计Count_1()函数
//一样的原理与1相交用十进制得出二进制码奇
//数位的数字(注意因为这里的移位个数是for循
//环中的变量值,所以是变动的而不是相等的,因
//每次的参考都是原始的二进制码,因此这里我们
//只能用表达式求每一次的位值但不能每次求时又
//把新的二进制码值赋还给num。
}
printf("\n");
printf("The binary sequence of even digits in this number:\n");
for (int bits = 31; bits >= 1; bits -= 2)//偶数位的打印(通过遍历不同的奇数形式
//的二进制位个数来使每一次该数对应的二
//进制码的最后一位都是偶数位的二进制位)
{
printf("%d ", (num >> bits) & 1);//与上文中奇数位的道理相同,只不过是移位的
//移位和对应最后一位是原始二进制码的奇偶数
//位这两者的奇偶性刚好对调而已
}
return 0;
}
效果展现
结语
以上就是我对打印二进制的奇数位和小数位这个项目的解题思路和代码以及做好后效果的展示,作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!