程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 編程中的進制轉換,編程進制轉換

編程中的進制轉換,編程進制轉換

編輯:C#入門知識

編程中的進制轉換,編程進制轉換


(二進制,八進制,十進制,十六進制)

  二進制  是由 0和1 組成

【十進制轉二進制】    如   23寫成二進制為 10111

    23/2=11余1

    11/2=5    1

    5/2=2     1

    2/2=1     0

  所以為  23寫成二進制為10111

【二進制轉十進制公式】

      a*2^0+b*2^1+……+m*2^(n-1)=

      例如 1011寫成十進制為 1*2^0+1*2^1+0*2^2+1*2^3=11

重點:1.寫二進制轉十進制時要從右往左寫

      2.指數從0開始

【十進制轉八進制】

    例如  48的八進制

        48/8=6 余0

      所以 48的八進制為60

 

【八進制轉十進制】   (同二進制轉十進制)

      a*8^0+b*8^1+……+m*8^(n-1)=

     60的十進制為     0*8^0+6*8^1=48

 

十六進制數為:0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)

【十進制轉十六進制】:如45十六進制為2D

【十六進制轉十進制】:a*16^0+b*16^1+……+m*16^(n-1)=

 

 【二進制轉八進制】 ( 二進制從左往右,每三位一組,每組從右開始第一位為1,第二位為2,第二位4,分別於二進制數相乘,每組求和,最後得數左右互換位置。){為什麼三個一組,因為 2的三次方為8。(1,2,4)}

       如   10110101

              10   110   101

          0*1+1*2=2    0*1+1*2+1*4=6    1*1+0*2+1*4=5

        所以10110101的八進制為562

 

【八進制轉二進制】(每個數分別除以2,每組得數不夠三位的從左面添0補充,順序從左到右順著寫即可)

         如   72的二進制為     111010

 

【二進制轉十六進制】

      同上,從左往右每四個數為一組,相乘的數為(1,2,4,8)   

 

【十六進制轉二進制 】

      同上,但要注意(ABCDEF),每一個字母為一組不能拆開除以2,最後結果從左往右順著寫。


用c語言編程,進制轉換的實現

輸入一個十進制數N,將它轉換成R進制數輸出,這裡假設最大為十六進制。
#include <stdio.h>
int exchange(int a)
{
if(a == 10){printf("A");return 0;}
if(a == 11){printf("B");return 0;}
if(a == 12){printf("C");return 0;}
if(a == 13){printf("D");return 0;}
if(a == 14){printf("E");return 0;}
if(a == 15){printf("F");return 0;}
printf("%d",a);
}
int main(int argc, char *argv[])
{
int x,y,i,j,a[110];
while(scanf("%d%d",&x,&y) == 2)//輸入x,y,x為十進制數,y為要轉換的進制
{
if(x < 0){printf("-"); x = -x;}//如果x小於零,轉換成正數再計算,然後先把負號輸出
if(x == 0){printf("0");return 0;}
for(i = 0;x != 0;i++)//一下為十進制轉換成其他進制的基本規則
{
a[i] = x % y;
x = x / y;
}
i--;
if(y > 10)//如果要轉換的進制大於十進制,要特別處理。
for(j = i;j >= 0;j--)
exchange(a[j]);
else for(j = i;j >= 0;j--)
printf("%d",a[j]);
printf("\n");
}
return 0;
}
 

編程中進制轉換的疑問

BCD碼的本質是用4位二進制數來表示一位十進制數,所以021127212901就是:0000 0010 0001 0001 0010 0111 0010 0001 0010 1001 0000 0001。由於8位二進制數是一個字節,寫成字節形式的十六進制數就是:02 11 27 21 29 01。所以換算起來很簡單的。即:

unsigned char int2bcd(unsigned char n)
{
    return (n / 10) * 16 + n % 10;
}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved