博客 / 詳情

返回

十進制轉二進制的方法 + 寫代碼實現[C/C++]

作者:柒燁帶你飛
本文為原創文章,版權歸本人所有。
文章首發於CSDN:​​https://blog.csdn.net/m0_61643743/article/details/130260640​

十進制轉二進制

整數十進制轉二進制轉換方法 + 如何用代碼實現為主要內容

一,十進制轉二進制方法

方法1:除二取餘法

十進制數除2得商取餘法:對十進制進行除法運算,十進制除以2可以得到一個商和餘數;再用得到的商除以2又得到一個商和餘數以此內推,直達最後一次除以2,商為0或1停止

十進制轉換例子:(13)(20)把這2個十進制數轉換為二進制

13/2 = 6.....1 ,6/2 = 3.....0, 3/2 = 1.....1 , 1/2 = 0.....1 ; 把餘數逆序排列,13的二進制數就是:1101
20/2 = 10.....0 10/2 = 5.....0 5/2 = 2.....1 2/2 = 1.....0 1/2 = 0.....1 20的二進制數就是:10100
十進制轉二進制時只需算出整數商即可,如實際 5/2 = 2.5,算出整數商2取餘就好,如:5/2 = 2....1


方法2:按權相加法

規律如下:

二進制 10000000 1000000 100000 10000 1000 100 10 1
十進制 128 64 32 16 8 4 2 1
位權(冪形式) 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

根據上面的規律,假設下面8位二進制都是0

128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 1
求129的二進制數:只需把上面表格中128和1下面的0改為1(128+1 =129) 129的二進制數:10000001
128 64 32 16 8 4 2 1
1 0 0 0 0 1 1 1
**求135的二進制數:(128+2+4+1=135)135的二進制數:10000111 128比135小所以128下改1,135-128 = 7。
64,32,16,8比7大所以都設為0,4比7小設1,7-4=3;2比3小設1, 最後剩餘的1,1等於1設1**
16 8 4 2 1
1 0 1 0 0
求20的二進制數:(16+4=20) 20的二進制數:10100。16比20小設1,20-16=4,8比4大設0,4等於4設1。
8 4 2 1
1 0 1 0
求10的二進制數:(8+2=10) 10的二進制數:1010。8比10小設1,10-8=2,4比2大設0,2等於2設1

藉助這個方法十進制轉二進制更容易,熟練了之後筆算,心算一下就能算出二進制數,不用像除2取餘法一樣繁雜

二,代碼實現

實例:

步驟實現:

獲取用户輸入的十進制數。
判斷用户輸入的數據是否不符合要求,符合則進入下一階段,不符合則重新輸入或退出。
十進制轉二進制運算實現區
輸出得到的二進制數
1,C 代碼實現
#include<stdio.h>
int main(){
    short BinaryNumbe[32]={0};//定義一個數組存儲二進制數
    int i,n;//i為數組下標,n用來存儲十進制數
 
    /*步驟1:
    獲取用户輸入的十進制數。
    判斷用户輸入的數據是否符合要求,符合則進入下一階段,不符合則重新輸入*/
    do
    {
    printf("請輸入要轉換的十進制數(1-2147483647):");//提示輸入十進制
    scanf("%d",&n);//scanf獲取輸入的數據
​
        if (n <= 0 || n > 2147483647)/*用if判斷數據是否輸入有誤,有誤則重新輸入*/
        {
            printf("輸入有誤,十進制轉二進制範圍為(1-2147483647)\n");
            continue;
            /*提示輸入有誤,用continue結束本次循環,再進行一次循環*/
        }
    } while (0);
    
    /*步驟2:
    十進制轉二進制計算實現區。
    用for循環,i為數組下標,計算十進制除2去餘賦值給存放二進制數據的數組*/
    for ( i = 0; i < 32  ; i++)//int最大值為(2147483647)32位二進制數最大也是2147483647。所以循環次數設置為32(0-31)
    {  
        BinaryNumbe[i] = n % 2;//取餘賦值給數組      
        n = n / 2; //除以2,得到下一個商,賦值給n
        if (n == 0)
        {
            break;//當商等於0時,不再進行多餘次數的循環,break跳出循環;
        }
    }
    
    /*步驟3:
    輸出二進制數據。
    上面i++已經記錄了循環計算的次數。
    i循環的次數 == i位二進制數 == 數組[i]最後賦值的餘數 。
    直接在下面for循環中加個i >= 0 ; i--,就能逆序輸出了。
    */
   printf("二進制數是:");
    for (n = 1 ; i >= 0 ; i--)
    {
        printf("%d",BinaryNumbe[i]);//逆序打印二進制數
        
        if (n%4 == 0 )
        {//為了美觀,用if判斷每輸出4個二進制數,打印一個空格。
         //該段用n來記錄了輸出次數,該段代碼可不加
            printf(" ");
        }
         n++;
        
    } 
    printf("\n");//換行
    system("pause");
    return 0;
}

把上述代碼簡化改成一個函數,思路不變

void Binary(int n){
    short Binary[32] ={0};//定義一個數組存放二進制0 1
    int i = 0;//數組下標
​
    for ( ; i < 32; i++)
    {
        Binary[i] = n%2;
        n = n/2;
        if (n == 0)
        {
            break;
        }
    }
    printf("二進制數是:");
    for ( ; i >= 0; i--)
    {
        printf("%d",Binary[i]);
    }
    printf("\n");
}

應用該函數代碼如下

#include<stdio.h>
void Binary(int n);
//=========================主函數main==========================//
int main()
{
  int n;
  printf("請輸入十進制數:");
  scanf("%d",&n);
  Binary(n);
  system("pause");
  return 0;
}
​
​
//==========================函數功能區=========================//
void Binary(int n){
    short Binary[32] ={0};//定義一個數組存放二進制0 1
    int i;//數組下標
​
    for ( i = 0; i < 32; i++)
    {
        Binary[i] = n%2;
        n = n/2;
        if (n == 0)
        {
            break;
        }
    }
    printf("二進制數是:");
    for ( ; i >= 0; i--)
    {
        printf("%d",Binary[i]);
    }
    printf("\n");
}

再次簡化用另一種思路修改(遞歸思路),這種代碼量更小更快捷,十進制轉二進制函數實現

void Binary(int n){//int n為十進制數
    short t = 0;//定義t存儲二進制
    if(n != 0){
        t = n % 2;
        n = n / 2;
        /*重點
        調用函數本身,一層層調用函數本身往下運算。
        直到n==0時不再調用函數本身,從裏到外一層層的打印取得的餘數*/
        Binary(n);
        
        printf("%d",t);
    }
}

完整代碼如下

#include<stdio.h>
void Binary(int n);
//=========================主函數main==========================//
int main(){
    int n;
    printf("請輸入十進制數:");
    scanf("%d",&n);
    Binary(n);
    
    system("pause");
    return 0;
}
//==========================函數功能區=========================//
void Binary(int n){
    short t = 0;
    if(n != 0){
        t = n % 2;
        n = n / 2;
        Binary(n);
        printf("%d",t);
    }
}
2,C++代碼實現
#include <iostream>     
using namespace std;
int main()              
{
    short BinaryNumbe[32]={0};//定義一個數組存儲二進制數
    int i,n;//i為數組下標,n用來存儲十進制數
​
    do
    {
    cout << "請輸入十進制數:" ;
    cin >> n;//cin獲取用户輸入的十進制數
    if (n <= 0  || n>2147483647)//if判斷輸入的數據是否有誤
    {
        cout << "輸入有誤,本程序十進制轉二進制範圍為(1-2147483647):"<< endl;
        continue;//continue結束本次循環,再進行一次循環
    }
    } while (0); 
    
    for ( i = 0; i<32; i++)
    {
        BinaryNumbe[i] = n % 2;//取餘賦值給數組
        n = n / 2;//除以2,得到下一個商,賦值給n
        if (n == 0)////當商等於0時,不再進行多餘次數的循環,break跳出循環;
        {
            break;
        }
    }
    
    /* 上面i++已經記錄了循環計算的次數。
    i循環的次數 == i位二進制數 == 數組[i]最後賦值的餘數 。
    直接在下面for循環中加個i >= 0 ; i--,就能逆序輸出了。*/
    cout << "二進制數是:";
    for (; i >= 0; i--)
    {
        cout <<  BinaryNumbe[i] ;//逆序打印二進制數
    }
    cout << endl;//換行
    
    system("pause");          
    return 0;
​
}
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.