进制转换

Done ACM/ICPC Start at: 2025-12-17 12:00 200 hour(s) Host: 30

超易懂!十进制转二进制的方法(小学生版)

小朋友,我们已经知道十进制是“满10进1”,二进制是“满2进1”(只有0和1两个数字)。把十进制数变成二进制数,核心就一个:除2取余,倒排余数!下面用讲故事、举例子的方式,把这个方法讲得明明白白~

一、先记住“转换口诀”

  1. 用十进制数 ÷ 2,算出商和余数(余数只会是0或1);
  2. 把余数记下来(这是二进制的“一位”);
  3. 用第一步得到的商,继续 ÷ 2,再记余数;
  4. 重复上面的步骤,直到商变成0为止;
  5. 把所有余数倒着排,就是最终的二进制数!

二、举个例子:把十进制10变成二进制

我们把“十进制10”想象成10颗糖果,要分给2个小朋友,一步步分:

步骤 计算(被除数 ÷ 除数 = 商 … 余数) 记录余数 商是否为0?
1 10 ÷ 2 = 5 … 0 0 否(商是5)
2 5 ÷ 2 = 2 … 1 1 否(商是2)
3 2 ÷ 2 = 1 … 0 0 否(商是1)
4 1 ÷ 2 = 0 … 1 1 是(商是0)

现在,我们记下的余数是:0、1、0、1(按步骤顺序)。
最后倒着排这些余数:1、0、1、0 → 所以十进制10的二进制是1010!

三、再试一个:十进制5转二进制

跟着步骤走:

  1. 5 ÷ 2 = 2 … 1 → 记余数1
  2. 2 ÷ 2 = 1 … 0 → 记余数0
  3. 1 ÷ 2 = 0 … 1 → 记余数1
  4. 倒排余数:1、0、1 → 十进制5的二进制是101!

四、特殊情况:十进制0转二进制

如果要转的数是0,不用除啦!二进制的0就是0~

五、用“画图法”理解(更直观)

拿十进制7举例:

7 ÷ 2 = 3 余1 → 余数1(最右边的位)
3 ÷ 2 = 1 余0 → 余数0(中间位)
1 ÷ 2 = 0 余1 → 余数1(最左边的位)
倒排余数:1 0 1 → 7的二进制是111

可以把余数想象成“从右到左盖积木”,先算出来的余数盖在右边,后算的盖在左边~

六、小技巧:验证结果对不对

转完后可以反过来验证:二进制转十进制,看结果是不是原来的数。 比如1010(二进制): 1×8 + 0×4 + 1×2 + 0×1 = 8+0+2+0=10(十进制)→ 没错!

七、动手练一练(答案在最后)

  1. 十进制8转二进制 → ?
  2. 十进制3转二进制 → ?
  3. 十进制15转二进制 → ?

答案:

  1. 8→1000(8÷2=4余0,4÷2=2余0,2÷2=1余0,1÷2=0余1 → 倒排1000)
  2. 3→11(3÷2=1余1,1÷2=0余1 → 倒排11)
  3. 15→1111(15÷2=7余1,7÷2=3余1,3÷2=1余1,1÷2=0余1 → 倒排1111)

小朋友,只要记住“除2取余、倒排余数”这8个字,多练几次,十进制转二进制就再也难不倒你啦!

#include<bits/stdc++.h>
using namespace std;
long long n,t=0,a[105];
int main(){
    cin>>n;
    while(n>0)
    {
        a[++t]=n%2;//先++,让t从0变成1,从1号位置开始 
        n=n/2;
    }
    for(int i=t;i>=1;i++)
        cout<<a[i];
    return 0;
}

二进制转十进制方法

#include<bits/stdc++.h>
using namespace std;
int s;
string a;//二进制数用字符串保存 
int main() {
    int n;
    cin>>a;   
    for(int i=0;i<a.size();i++)
		s=s*2+(a[i]-'0');//逐个进行分离 ,每次乘以2加上分离的数 
    cout<<s;
    return 0;
}

其他进制只需要改对应的进制数2

十进制转换十六进制

#include<bits/stdc++.h>
using namespace std;
long long n,t=0,a[105];
int main(){
    cin>>n;
    while(n>0)
    {
        a[++t]=n%16;//先++,让t从0变成1,从1号位置开始 
        n=n/16;
    }
    for(int i=t;i>=1;i++)
       	if(a[i]<10)
			cout<<a[i];
		else
			cout<<char('a'+a[i]-10); //超过10变成对应的字母 
    return 0;
}
Status
Done
Rule
ACM/ICPC
Problem
8
Start at
2025-12-17 12:00
End at
2025-12-25 20:00
Duration
200 hour(s)
Host
Partic.
30