一、二进制转十进制
讲十进制n转换为二进制数
/*
十进制转换二进制(n)
1、n % 2 作为二进制的最末尾
2、n /= 2;
3、重复1 2步直到n==0
*/
void Shift1(int n)//非递归写法
{
if(n==0)
{
printf("%d",0);
}
int a[100];
int i = 0;
while(n!=0)
{
a[i] = n % 2;
i++;
n /= 2;
}
for(int j=i-1;j>=0;j--)
{
printf("%d",a[j]);
}
printf("\n");
}
void Shift2(int n) //递归写法
{
if(n==0)
{
return ;
}
else
{
Shift2(n/2);
printf("%d",n%2);
}
}
十进制转换二进制(n)
1、n % 2 作为二进制的最末尾
2、n /= 2;
3、重复1 2步直到n==0
*/
void Shift1(int n)//非递归写法
{
if(n==0)
{
printf("%d",0);
}
int a[100];
int i = 0;
while(n!=0)
{
a[i] = n % 2;
i++;
n /= 2;
}
for(int j=i-1;j>=0;j--)
{
printf("%d",a[j]);
}
printf("\n");
}
void Shift2(int n) //递归写法
{
if(n==0)
{
return ;
}
else
{
Shift2(n/2);
printf("%d",n%2);
}
}
二、二进制转十进制
二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:0110 0100,转换为10进制为:
下面是竖式:
0110 0100 换算成十进制
第0位 0 * 2^0 = 0
第1位 0 * 2^1 = 0
第2位 1 * 2^2 = 4
第3位 0 * 2^3 = 0
第4位 0 * 2^4 = 0
第5位 1 * 2^5 = 32
第6位 1 * 2^6 = 64
第7位 0 * 2^7 = 0
公式:第N位2^(N)
100
用横式计算为:
0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 0 * 2^3 + 0 * 2^4 + 1 * 2^5 + 1* 2^6 + 0 * 2^7 = 100
0乘以多少都是0,所以我们也可以直接跳过值为0的位:
1 * 2^2 + 1 * 2^5 +1*2^6 = 100
三、十进制转八进制
十进制转八进制和十进制转二进制类似,唯一不同的时除数变成8
被除数 | 计算过程 | 商 | 余数 |
120 | 120/8 | 15 | 0 |
15 | 15/8 | 1 | 7 |
1 | 1/8 |
0 |
1 |
因此120转换为八进制为:170
四、八进制转化为十进制
类似于二进制转换为二进制转换为十进制
五、二进制与其他进制之间的转换
二进制->八进制 八进制->二进制
010 110 110 1 2 4 5
2 6 6 001 010 100 101
因此二进制数010110110转换为八进制为266; 因此八进制数1245转换为二进制为001010100101
二进制->十六进制 十六进制->二进制
0101 1110 1010 1010 1001 0101 9 a 8 f 7
5 e a a 9 5 1001 1010 1000 1111 0111
因此二进制数转换为十六进制为:5eaa95; 因此十六进制数9a8f7转换为二进制为:10011010100011110111
六、其他进制可以通过以上进制的转换进行转换
例:
八进制->十六进制 可转换为 八进制->二进制->十六进制