位运算转换二进制【进制转换】
普通十进制转换二进制:
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;
}