位运算实现二进制转换 C语言

来源:互联网 发布:淘宝视频教程全集 编辑:程序博客网 时间:2024/06/08 20:18
位运算实现二进制转换

代码:


#include <stdio.h>void change_binary(char,char []);void print_binary(char []);void main(){char binary[8],decimal;decimal=-2;change_binary(decimal,binary);print_binary(binary);}void change_binary(char decimal,char binary[]){int i,temp=128;for(i=0;i<8;i++){binary[i]=(decimal&temp)>>(7-i);temp/=2;}}void print_binary(char binary[]){int i;for(i=0;i<8;i++)printf("%d",binary[i]);}


原理是取出一个十进制数在内存中听每一位的二进制数的数字,是0还是1,是用&(按位与)运算符一位一位的求,第一次求第一位的数字,第二次第二位,然后依次求出所有的,然后将他们保存起来,然后再输出。

比如:

(数)进制

(11)10=(00001010)2 

比如现在要将十进制11转换成二进制(实际上不用转,因为数据在内存里面就是用二进制存储的,所以我们只要取出每一位就好了)


char a=11&1;

/*

这里是取十进制11的第一位

(11)10=(00001011)2

(1)10=(00000001)2


     00001011
&  00000001
__________

     00000001


 (00000001)2=(1)10

这个(1)10就是十进制11的最右边一个二进制位

 */


/*

这里取第二位

(11)10=(00001011)2

(2)10=(00000010)2


     00001011
&  00000010
__________

     00000010


(00000010)2=(2)10

对吗?不对,应该还要将那个二进制右移1位


00000010>>1=00000001

(00000001)2=(1)10


现在就等于十进制11的第二个数了,然后依此可以求出所有的数
*/


 
原创粉丝点击