位运算十转二(说实话这个编辑器我还玩不好)

学到个好玩的,用位运算简单地实现十进制转二进制!

这是做codility第一题的时候,嫌连除法太麻烦(其实是我太菜写不对),从一位博主那里学的,感觉挺妙,利用了电脑本身只认识机器数的特性;用位运算,快且代码短;
代码如下(本来想用malloc分配空间,但还没学会不太敢用)

#include <stdio.h>
#include <stdlib.h>
/*用位运算实现十转二,很妙.*/
int main()
{
	int n,a[100],i=0,count=0;
	scanf("%d",&n);
	while(n!=0)
	{
		a[i]=(n&1);
		/*这里用的与1,
		其实就是把二进制数的末位取出来.*/
		n=n>>1;
		/*这个>>表示向右移码,>>1就是向右移一位.
		比如1000101>>1=0100010.*/
		i++;
		count++;/*感觉这个方法挺笨的,还得记录位数*/
	}
	for(i=count-1;i>=0;i--)
		printf("%d",a[i]);
	return 0;
}

注意输出顺序,一开始我按数组下标递增写的…也是傻了.
(纯小白,如有不对还请指正 XD)

posted @ 2022-04-05 18:22  弦合二挂  阅读(54)  评论(0)    收藏  举报