位运算转换二进制【进制转换】

普通十进制转换二进制:

 1.通过不断 %2 和 /2 得到用 1 0表示的数存进数组 但是得到的是倒序 

 2.将数组里面的值倒序输出再存入新的数组即可(其他进制转换同理)

 但是这种方法复杂且代码较长

#include<stdio.h>
int main()
{
    int a[105],b[105],n;
    scanf("%d",&n);
    int count=0;
    while(n){
        b[count++]=n%2;
        n/=2;
    }
    int count1=0;
    for(int i=count-1;i>=0;i--){
        a[count1++]=b[i];
    }
    for(int i=0;i<count1;i++){
        printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

位运算将十进制转换成二进制

1.将i从31开始循环(如果是32位整数,但2^32会爆int,所以从31开始)

2.将i左移一位(1<<i)然后和n 做(&)运算

3.判断运算结果是否为true 如果为真 将1存入第i位数组,反之将0存入数组

通过该方法也可以实现进制转换 例如: 10

但是转换后会出现多个0 且必须32位(与定义i=31~0相符合) 

#include<stdio.h>
int main()
{
    int a[105],n;
    scanf("%d",&n);
    for(int i=31;i>=0;i--){
        a[i]=n&(1<<i)?1:0;
    }
    for(int i=31;i>=0;i--){
        printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

 

posted @ 2019-03-03 10:41  XJHui  阅读(506)  评论(0编辑  收藏  举报