1. 1k=1024bit但是怎麼轉換為10進制數和16進制數 我知道1k=1024bit搞不清1k是幾進制數所以不會計算。
這怎麼轉換.
0 - 9 是十進制
而 0 - F 是十六進制
如果你需要知道存儲單位的進制的話 一般都是使用十進制來表示 1k 是十進制
400 是十六進制 10000000000 是二進制
2. 把k進制數化為十進制數的方法是什麼
概括說就是:從右至左,第n位的數字*k的(n-1)次方
比如Oxad74:16^0*4+16^1*7+16^2*14+16^3*11=……
3. 用C語言將k進制的數轉換成10進制的 並輸出最大的十進制數
上面代碼不是基本完成了嗎
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intKToD(charstr[],intk);
intmain()
{
intn,k,i,*a,max;
charch[64];
scanf("%d",&n);
fflush(stdin);
a=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
memset(ch,0,64);
fscanf(stdin,"%s%d",&ch,&k);
a[i]=KToD(ch,k);
}
max=a[0];
for(i=1;i<n;i++)
max=(max>a[i])?max:a[i];
printf("%d ",max);
return0;
}
intKToD(charstr[],intk)
{
intd,i;
d=0;
for(i=0;str[i]!=0;i++)
d=d*k+(str[i]-'0');
returnd;
}
4. C語言編程 求一個將K進制數轉化為10進制數的代碼。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 20
typedef struct
{
char str[19];//輸入數據串
int k;//進制
int result;//十進制結果
}data;
int f(char s[],int a)
{
int i,n,t=0;
for(n=strlen(s)-1,i=t=0;*(s+i)!='\0';i++,n--) /*轉換成十進制數*/
{
if(*(s+i)<='9')
t+=(*(s+i)-'0')*int(pow((float)a,n));
else
t+=(*(s+i)-'A'+10)*int(pow((float)a,n));
}
return t;
}
int main()
{
data input[MAX];
int i,n;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
scanf("%s %d",input[i].str,&input[i].k);
input[i].result = f(input[i].str,input[i].k);
}
for(i = 0;i < n; i++)
{
printf("%d\n",input[i].result);
}
system("PAUSE");
return 0;
}
5. 十六進制轉十進制比較簡單的演算法,怎麼算
如果是純計算的話
,
用這個表來轉
:
16
,
256
,
4096
,
65536
,
1048576
,
16777216 ...(
分別是就是
16^1
,
16^2
,
16^3……)
先找第一個比要轉的那個數小的數
,
然後用這個數除那個要轉的數
,
得到的商就是那個位的數
(
位數就是是指數
),
然後找到第一個比余數小的數
,
還按照那個方法
,
依此循環
,
直到余數小於
16
例子
:
700980
第一步
,700980
最大比
65536
大
,
用
700980
除以
65536,
商是
10,
那麼第
4
位就是
A
余數是
45630
第二步
,45620
最大比
4096
大
,
用
45620
除以
4096,
商是
11,
第
3
位是
B
余數是
564
第三步
,564
最大比
256
大
,
用
564
除以
256,
商是
2,
第
2
位
2
余數是
52
第四步
,52
最大比
16
大
,
用
52
除以
16,
商是
3,
第
1
位
3
余數是
4
第
0
位是
4
結果就是
:
AB234
第二個例子
:
3599
用
256
除
,
得
14,
就是
E
余數
15,
不夠
16,
就把第
1
位空出來
,
用
0
填上
15
滾到第
0
位
,
就是
F
結果
:
E0F
一十進制就是逢十進一(0,1,2,3,4,5,6,7,8,9,後面就要進位才能表示了)
十六進制就是逢十六進一(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,後面就要進位才能表示了)
所謂進制就是單個數不能表示時要用二位數及二位數以上的數表示的處理辦法.其實可以任意進制,只是要用起來方便罷了,比如時間就是60進制,紀年中的世紀是一百進度,圓的一周用度數表示時是360進制.
十進制: 34 就是 3 * 10^1 + 4 * 10^0
而在十六進制中: 34就是 3 * 16^1 + 4 * 16^0 (轉換成十進制只需乘出
結果就行了,得52,即十六進制中的34為十進制中的52)
十進制化為十六進制就是除16的辦法: 34除以16,得2餘2,即為22,即十進制中的34
這十六進制中的22
(即:十六進制化成十進制是乘16,十進制化成十六進制是除16)
事實上,k(k是正整數)進制數逢k進一這么個意義,一個十進制數可寫成
a(n)*10^n+...+a(1)*10+a(0)+a(-1)*10^(-1)+... (a(i)表示0—9中的某個數)
同樣,k進制數有形式:
b(n)*k^n+...+b(1)*k+b(0)+b(-1)*k^(-1)+... (b(i)表示0—(k-1)中的某個數)
當一個k進制數要轉化為十進制數時,用上式直接計算即可;而當十進制數要轉化為k進制數時,則對其整數部分除k取余,對其小數部分則乘k取整,此過程下以十進制轉化十六進制為例舉一例:
十進制數1673.59375
1673/16=104...9 , 104/16=6...8 , 6/16=0...6;
0.59375*16=9.5 (取9), 0.5*16=8.0 (取8).
所以十進制數1673.59375轉化為十六進制數後為: 986.98
二數的進制和進制轉換
考慮一個10進制數123,數字1、2、3在這個數中的重要性是不一樣的,3代表的是100的3倍,2代表101的2倍,而1代表的則是102的1倍。數學上把100,101和102稱為對應數位上的權重(簡稱權),分別表示了對應位上的數字對整個數值的「貢獻」。對於10進制數來說,各位權從小到大分別是100、101、102……,都是10的各次冪。對於各位上的數字,我們稱為某權的系數,簡稱系數。
其他進制數也存在同樣的問題,例如2進制數各位權重分別是2的各次冪,8進制數是8的各次冪等等。
需要說明的是,各種進制數都是人們為了理解數而進行的一種表述,在計算機計算過程中,是不存在進制這種概念的,對於C語言表示數的三種形式:0x12(16進制)、18(10進制)和022(8進制),在內存中都是一樣的。
如果已經知道一個數k,在某種進制w條件下,計算各位的系數一般採用除余法,基本演算法如下:
首先估計這個數的最大位數N
n = N,divisor = wn-1
b(n) = k / divisor, k = k % divisor,divisor = divisor /w,n --
如果n ==0演算法結束 ,否則轉3
例如對於C語言中的unsigned char 類型,最大可能為3位8進制數,如果已經知道一個數n=252,計算8進制的過程如下:
N =3
n = N,divisor = 8n-1 = 64
b(3) = 252 / 64 = 3, k = k % 64 =60,divisor = divisor /8 = 8,n -- = 2
b(2) = 60/8 = 7,k = k %8 =4,divisor = 8/8 =1,n = 1
b(1) = k / 1= 4 ,k=k %1 =0,divisor = 1/8,n = 0
n == 0演算法結束
計算結果252就是8進制數0374
如果不按照上面的冪次方式規定各位數的權,也可以定義一些特殊的進制數。例如,我們按照從小到大順序分別規定各位的權重分別為w(n),n=1,2,3....,(注意,必須滿足w(n) | w(m),n<= m,也就是低位權必須能整除高位權)已知一個數計算各位系數也一樣可以採用修正後的除余法。修正後的除余法為:
首先估計這個數的最大位數N
n = N,divisor = w(n)
b(n) = k / divisor, k = k % divisor,n--,divisor = w(n)
如果n ==0演算法結束 ,否則轉3
可見,當w(n) = bn時,這個修正的除余法就和開始的除余法等價了
如果需要在不同進制間轉換,最簡單的方法是先把一種不容易進行四則運算的進制轉換成容易進行四則運算的10進制,然後利用除余法轉換成給定的進制。例如對於022,很容易利用權的定義計算出他的10進制形式為2 * 81 + 2 * 80 = 18,轉換成16進制利用除余法可以得到為0x12。
6. 將十進制轉化為k進制方法
第一步,將給定的十進制整數除以基數k.余數便是所求k進制的最低位:
第二步,將上一步的商再除以基數k,余數便是所求k進制數的次低位:第三步,重復第二步,直到所得的商為0,將每步的余數依次從右到左排列,便是k進制各位上的數,最後一步的余數是最高位。
7. 如何把某一個k進制的數化為10進制數呢C++
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
void main()
{
char a[80];
int i,p=1,m,n=0,k;
cout<<"請設定要轉化的進制位數:"<<endl;
cin>>k;
cout<<"輸入一個"<<k<<"進制數:"<<endl;
cin>>a;
m=strlen(a);
for(i=m-1;i>=0&&k!=16;i--)
{
n+=(a[i]-48)*p;
p*=k;
}
if(!n)
for(i=m-1;i>=0;i--)
{
if(a[i]<65) n+=(a[i]-48)*p;
if(a[i]>=65) n+=(a[i]-55)*p;
p*=k;
}
cout<<"相應的10進制數為:"<<n<<endl;
}
8. c語言,求代碼。。輸入一個K進制數轉換為十進制並輸出。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
long t1;
int i, n, t, t3;
char a[100];
printf("請輸入一個數:\n");
gets(a); //將輸入的n進制的數儲存在數組a中
strupr(a); //將數組中的小寫字母轉化為大寫字母
t3 = strlen(a); //求出數組的長度
t1 = 0;
printf("請輸入轉換的數的進制:\n"); //輸入要轉換的數的進制
scanf("%d", &n);
for(i=0; i<t3; i++)
{
if(a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >n ) //判斷輸入的數據和進制數是否符合
{
printf("data error!!\n"); //錯誤
exit (0);
}
if(a[i] >='0' && a[i] <= '9') //判斷是否為數字
t = a[i] - '0'; //求出該數字賦值給t
else if (n >=11 && (a[i] >= 'A' && a[i] <= 'A' +n -10)) //判斷是否為字母
t = a[i] - 'A' +10; //求出該字母所代表的十進制數
t1 = t1 *n +t; //求出最終轉換成的10進制數
}
printf("轉化為的10進制數為 %ld\n", t1);
return 0;
}
網上看的 http://blog.csdn.net/junjieguo/article/details/7392343
9. 將十進制轉化為k進制方法
十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。
1、十進制整數轉換為二進制整數 十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。
2、十進制小數轉換為二進制小數
十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。
然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。
(9)k進制轉換為10進制的演算法擴展閱讀:
計算機內部使用二進製表示數,二進制與十進制的轉換是比較復雜的。這個過程要做多次除法,而計算機對於除法的計算是最慢的。把十進制的50轉換成二進制的110010還不算完,計算出結果1100100之後還要再轉換成十進制數100,這是一個做乘法的過程,對計算機來說雖然比除法簡單,但計算速度也不快。
本來一步完成的事,卻白白浪費了好多步驟,究其原因,就是人們使用的十進制不適應現代化信息設備,不是最佳信息計數法。如果人們使用二進制來表示數,不僅與計算機的交流變得簡便,而且只需要記得怎樣寫0和1就能夠記數了,比用十進制需要學習十個數字簡單了80%。這
還不是全部,舉個例子來說,比如十進制的小數0.8,在二進制里怎樣表示呢?要寫成0.11001100...後面還有無數個1100,或者換句話說,十進制的有限小數轉換成二進制不能保證能精確轉換,二進制小數轉換成十進制也遇到同樣的問題。
這也為信息處理帶來了很大的不便。甚至為了能夠較快的轉換十進制數和二進制數,在設計處理器的時候加入了專門的電路和語句來完成這個過程,造成了處理器設計的浪費。因此,可以說十進制不適應現代化信息設備。