先看以下文章了解一下任意的进制转换_学习记录-CSDN博客
上代码
#include <iostream>
using namespace std;
int log2(int a) {
int count = 0;
while (1) {
if (a >>= 1)
count++;
else
break;
}
return count;
}
void fConvert(int n, int m)
{
int a[1005], count = 0;
while(n!= 0)
{
a[count++] = n & (m - 1);
n = n>>log2(m);
}
for (int i = count - 1; i >= 0; i--)
{
if (a[i] < 10)
{
cout<<a[i];
}
else
{
cout<<(char)(a[i] - 10 + 'a');
}
}
cout<<endl;
}
int main()
{
int n;
cin>>n;
fConvert(n, 2);
fConvert(n, 8);
fConvert(n, 16);
return 0;
}
a % b = a & (b-1)
此时的b应该为2的n次方
左移n位相当于乘2的n次方
右移n位相当于除以2的n次方