c語言進制轉換
Ⅰ c語言進制轉換
計算機中常用的數的進制主要有:二進制、八進制、十進制、十六進制。
2進制,用兩個阿拉伯數字:0、1;
8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進制,用十個阿拉伯數字:0到9;
16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。
下面用余數短除法把十進制數轉化為二進制數為例進行說明
1、明確問題。舉個例子,我們現在是要將一個十進制數字156轉換成二進制數字。先將這個十進制數作為被除數寫在一個倒著的「長除法」的符號里。把目標數系的基數(在這里二進制是「2」)作為除數寫在這個除法符號的外面。用這個方法將計算過程可視化會更方便理解,因為整個計算過程只需將數字一直除以2。
活用這個方法可以將所有十進制數字轉換成任何進製表達。除數為2是因為我們最終想得到的以2為基數的數(即二進制數值) 。如果最終想得到其他數系的數字,用目標數系的基數代替這個方法里二進制的基數2 就可以了。例如,要得到基數為9的數,就用9來代替2作為除數 。最終的結果就是目標數系的數字表達。
(1)c語言進制轉換擴展閱讀:
十進制--->二進制
對於整數部分,用被除數反復除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的余數。另外,所得到的商的最後一位余數是所求二進制數的最高位。
對於小數部分,採用連續乘以基數2,並依次取出的整數部分,直至結果的小數部分為0為止。故該法稱「乘基取整法」
十進制--->八進制
10進制數轉換成8進制的方法,和轉換為2進制的方法類似,唯一變化:除數由2變成8。
Ⅱ C語言程序 進制轉換
for(inti=0;i<=k;i++)
printf("%d",a[i]);
因為主程序裡面還有數組a的輸出!如果你是想說為什麼後面輸出的數字會超過4個的話,建議數組輸出裡面採用:
printf("%d",a[i]);
數字輸出後加個空格
錯誤分析:
for循環的執行過程:
初始化-{條件判斷成立-函數體-條件變數更新}多次循環執行-條件判斷不成立-跳出
因此,循環變數更新表達式(也就是i++)是要比正常的for循環體多進行一次的。也就是說,當i=4的時候,b[4]是沒有賦值的。那麼,在對a進行賦值的時候,a[0]的值是b在系統創建數組時候採用的默認值(該值根據平台環境的不同變化)。
Ⅲ C語言的進制轉換程序
在這里獻丑了!
1.將你輸入的數通過字元串的方式存儲是方便一下的計算的
正如你舉得例子,輸入137 數組中存入的是 字元型的137 要將
裡面的每個字元型的數字轉換成數值型的數字就得 *p-'0',因為
字元存儲時實際存儲的是字元的ASC碼, 例如 輸入 1(字元型)ASCII碼為
49 若不減去0的ASC碼 就會以49去參加運算
這個while循環是用於數制轉換的.將八進制轉換成10進制,其實就是將8進制數碼按權展開,137=1*8^2+3*8^1+7*8^0
2這個while就是這個用處,一步一步看下去,加入輸入為137存儲為字元137
第一次是將字元型的1減去0的asc碼就得到了數值型的1 1本來是最高位應該是但是這里得到的只有系數(姑且叫做系數吧而權為8^0=1),由於後面還有兩個數,這樣通過循環n=n*8+*p-'0';將1的權值提升到了8^2,對第二位也類似.
3.要進行浮點數的進制轉換就得找准小數點的位置.然後按照類似的方法就可以了
Ⅳ 任意進制數的轉換c語言
任意進制數轉換為十進制,可以用 strtol()函數。
函數定義:
long int strtol(const char *nptr,char **endptr,int base);
見 網頁鏈接 網路。
十進制轉換為任意進制,可以用itoa()函數。
// itoa 例子
#include<stdio.h>
#include<stdlib.h>
intmain(){
inti;
charbuffer[33];
printf("Enteranumber:");
scanf("%d",&i);//輸入整數i
itoa(i,buffer,10);//將i轉化為10進制數,存到buffer中
printf("decimal:%s
",buffer);//輸出列印buffer
itoa(i,buffer,16);//將i轉化為16進制數,存到buffer中
printf("hexadecimal:%s
",buffer);//輸出列印buffer
itoa(i,buffer,2);//將i轉化為2進制數,存到buffer中
printf("binary:%s
",buffer);//輸出列印buffer
return0;}
Ⅳ 用c語言編程:進制轉換
上面的仁兄做的不怎樣,不能滿足要求。我做了一個。你試試!可以放很大的數。我也是菜鳥級的。希望我的付出你會認可!!
#include"stdio.h"
#include"math.h"
#include"ctype.h"
void main()
{
double R,S,N=0;
char a[50],m;
char str[]="0123456789ABCDEF",c[2];
int i=0,j=0,b[50];
long n;
clrscr();
printf("請輸入轉換前的數據N,進制R和轉換後的進制S(R和S請勿超過16):\n");
scanf("%s%lf%lf",&a,&R,&S);
printf("將%.0lf進制數%s轉換成%.0lf進制數的結果為:",R,a,S);
if(a[0]=='-')/*當以負數輸入的時候輸出負號*/
{
printf("-");
a[0]='0';
}
while(a[i]!='\0')/*把輸進去的字元型轉換成整型*/
{
if(a[i]>='0'&&a[i]<='9')
{
c[0]=a[i];
b[i]=atoi(c);/*數據類型轉換*/
}
if(a[i]>='A'&&a[i]<='F')/*在以A至F輸入時做處理*/
{
b[i]=a[i]-65+10;/*A的ASCLL為65*/
}
i++;
}
i--;
while(i>=0)/*R進制數N對應10進制的值*/
{
N+=b[i--]*pow(R,j++);
}
n=N;
while(n!=0)/*除以要轉換的S進製取余數放到數組b中*/
{
b[++i]=n%(long)S;
n=n/S;
}
while(i>=0)/*數組b倒序輸出對應的str的值*/
{
printf("%c",str[b[i--]]);
}
}
Ⅵ C語言中的進制怎麼轉換啊
關於進制轉換,我覺得挺好玩的不就是幾個公式吧了,
就如我第一次所學的二進制轉換為十進制,十進制轉換為二進制,那樣的類型其實也挺有趣的
比如:一個二進制數轉化為十進制數,如哦我所給的一個二進制數「101101001」我就設十進制數是Z
首先有個公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0
把只是X換為2,算出來的就是你所得到的此二進制數所對應的十進制數
同理:如八進制數轉換為十進制數就是把X換為8,十六進制數轉換十進制數把X換為16,
至於二進制數轉化為八進制數更有意思;
首先我引進一個例子:這是一個比較特殊的二進制數:111111111111
首先把這組數按三個數劃分一組(從右開始劃分):如,111,111,111,111 於是結果是7777
然後就分別把化為各組的數組轉化為是進制數,最後進把你剛才算出的數按原來的順序排起來,於是得到的結果就是你想要的
那十六進制就是把數組中的每四個劃分一組(從右開始劃分的)
如111111111111劃分結果為1111,1111,1111, 方法與上面一樣,於是它的結果是fff
關於十進制轉化二進制,八進制和十六進制,方法都是一樣的
同二進制方法雷同。
Ⅶ C語言中如何實現進制轉換
1、十進制轉換成八進制有兩種方法:
(1)間接法:先將十進制轉換成二進制,然後將二進制又轉換成八進制。
(2)直接法:八進制是由二進制衍生而來的,因此可以採用與十進制轉換為二進制相類似的方法,還是整數部分的轉換和小數部分的轉換,下面來具體講解一下:
①整數部分
方法:除8取余法,即每次將整數部分除以8,余數為該位權上的數,而商繼續除以8,余數又為上一個位權上的數,這個步驟一直持續下去,直到商為0為止,最後讀數時候,從最後一個余數起,一直到最前面的一個余數。
②小數部分
方法:乘8取整法,即將小數部分乘以8,然後取整數部分,剩下的小數部分繼續乘以8,然後取整數部分,剩下的小數部分又乘以8,一直取到小數部分為零為止。如果永遠不能為零,就同十進制數的四捨五入一樣,暫取個名字叫3舍4入。
2、十進制的轉換到十六進制:
十六進制與八進制有很多相似之處,可以參照上面八進制與十進制的轉換實現這兩個進制之間的轉換。
Ⅷ c語言進制轉換
寫個遞歸函數解決,pelles c7.0 實測OK, LZ你這么看呢
#include <stdio.h>
void DecToR(int x, int r)
{
int t;
if(x>0)
{
DecToR(x/r, r);
t = x%r;
printf("%c", t<10?('0'+t):('A'+t-10));
}
return;
}
int main()
{
int n;
int r;
while(scanf("%d%d", &n, &r)!=EOF)
{
if(n<0) printf("-"), n = -n;
DecToR(n, r);
printf("\n");
}
return 0;
}
Ⅸ C語言的進制轉換
((unsigned)(x&(1<<(n-1)))>>(n-1))
這個式子會得到
0
或者
1
是int值
puchar()需要括弧裡面是字元型的,
比如putchar('1'),
沒有單引號的0或者1,代表的是ASCII表裡面位置是0或者1的字元,明顯不是我們想要的,所以需要+'0',相當於』0『
+
0
=
』0『,'0'+1=』1『.
當然也可以直接用printf來進行輸出,比如
int
i
=((unsigned)(x&(1<<(n-1)))>>(n-1));
printf(i,%d);
但是明顯的效率沒有單純的putchar來的高,完全沒有必要