思路:十進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制整數(shù)采用"除16取余,逆序排列"法。
10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有廣信免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
具體做法是:用16整除十進(jìn)制整數(shù),可以得到一個(gè)商和余數(shù);再用16去除商,又會(huì)得到一個(gè)商和余數(shù),如此進(jìn)行,直到商為0時(shí)為止,然后把先得到的余數(shù)作為十六進(jìn)制數(shù)的低位有效位,后得到的余數(shù)作為十六進(jìn)制數(shù)的高位有效位,依次排列起來(lái)。
參考代碼:
#include?"stdio.h"?
int?main()?
{?
int?num,a[100],i=0,m=0;?
char?hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
scanf("%d",num);?
while(num0)?
{?
a[i++]=num%16;?
num=num/16;?
}?
printf("轉(zhuǎn)化為十六進(jìn)制的數(shù)為:");?
for(i=i-1;i=0;i--)//倒序輸出?
{?
m=a[i];
printf("%c",hex[m]);?
}?
printf("\n");?
}
/*
運(yùn)行結(jié)果:
17
轉(zhuǎn)化為十六進(jìn)制的數(shù)為:11
*/
首先對(duì)于一個(gè)整數(shù),無(wú)論是十進(jìn)制還是十六進(jìn)制,它的值是一定的。
所以,轉(zhuǎn)換16進(jìn)制和10進(jìn)制原理是一樣的,先求出轉(zhuǎn)換后的值,然后再以十六進(jìn)制的形式輸出就行了。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
你不會(huì)是直接從網(wǎng)頁(yè)里面復(fù)制就粘貼到編輯器里面吧?
那樣不行的,你自己重新輸入一下?;蛘呦瓤截惖轿谋疚臋n里面,再?gòu)奈谋疚臋n里面復(fù)制。從網(wǎng)頁(yè)里面直接復(fù)制有特殊字符的。
還有,程序函數(shù)不能在主函數(shù)里面定義的。
#include stdio.h
int convert(char * str);
void main()
{
char str[20];
int result;
scanf("%s",str); //自己輸入一個(gè)十六進(jìn)制的串
result = convert(str);
printf("%0x",result);
}
int convert(char * str)
{
int i,sum = 0;
for(i = 0;str[i] != '\0';i++)
{
if(str[i]='0' str[i]='9')
sum += sum*16 + str[i]-'0';
else if(str[i]='f' str[i]='a')
sum += sum*16 + str[i]-'a'+1;
else if(str[i]='F' str[i]='A')
sum += sum*16 + str[i]-'A'+1;
}
return sum;
}
**
程序功能:求二進(jìn)制,十進(jìn)制,八進(jìn)制
創(chuàng)建人:蒲宇林
創(chuàng)建日期:2007年8月13日
**/
#include
void
two();
void
eight();
void
sixteen();
/**主函數(shù)**/
void
main()
{
int
select;
do
{
printf("0
-
退出,1
-
十進(jìn)制轉(zhuǎn)二進(jìn)制,2
-
十進(jìn)制轉(zhuǎn)八進(jìn)制,3
-
十進(jìn)制轉(zhuǎn)十六進(jìn)制");
scanf("%d",select);
switch(select)
{
case
1
:
two();
break;
//十進(jìn)制轉(zhuǎn)二進(jìn)制
case
2
:
eight();
break;
//十進(jìn)制轉(zhuǎn)八進(jìn)制
case
3
:
sixteen();
break;
//十進(jìn)制轉(zhuǎn)十六進(jìn)制
default
:
printf("您的輸入有誤,請(qǐng)重新輸入!");
break;
}
if(select
==
0)
{
break;
}
}while(1);
}
void
two()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
2;
num
=
num
/
2;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為二進(jìn)制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
eight()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為八進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
8;
num
=
num
/
8;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為八進(jìn)制:");
//打印
for(;
i
=
;
i--
)
{
printf("%d",arr[i]);
}
printf("\n");
}
void
sixteen()
{
int
num,
i;
int
arr[20];
printf("\n請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);
for(
i
=
;
1
;
i++)
//轉(zhuǎn)換為二進(jìn)制并存入數(shù)組
{
arr[i]
=
num
%
16;
num
=
num
/
16;
if(num
==
0)
{
break;
}
}
printf("轉(zhuǎn)換為十六進(jìn)制:");
//打印
for(;
i
=
;
i--
)
{
switch(arr[i])
{
case
10
:
printf("a");
break;
case
11
:
printf("b");
break;
case
12
:
printf("c");
break;
case
13
:
printf("d");
break;
case
14
:
printf("e");
break;
case
15
:
printf("f");
break;
default
:
printf("%d",arr[i]);
}
}
printf("\n");
}
多麻煩?。?/p>
看好了:
#includestdio.h
int a;
char *str="1Af";
int main()
{
sscanf(str,"%x",a);//%x為讀入16進(jìn)制數(shù),大小寫均可。sscanf是從c字符串中讀入變量。
printf("%i",a);
return 0;
}
根據(jù)10進(jìn)制轉(zhuǎn)換為16進(jìn)制的規(guī)則,編寫C語(yǔ)言程序?qū)?0進(jìn)制數(shù)轉(zhuǎn)換為16進(jìn)制數(shù)。
具體實(shí)現(xiàn)方法可參考如下程序:
#includestdio.h
void?main()
{
int?i,?x;?//?x表示欲轉(zhuǎn)換的10進(jìn)制數(shù)
int?data[10],?index=0;??//?data數(shù)組存放轉(zhuǎn)換后的16進(jìn)制數(shù),index表示下標(biāo)
scanf("%d",?x);??//?接受欲轉(zhuǎn)換的10進(jìn)制數(shù)
for(i=0;?i10;?i++)??//?對(duì)數(shù)組data進(jìn)行初始賦值操作
data[i]?=?0;
printf("%d對(duì)應(yīng)的16進(jìn)制為:",?x);
//?反復(fù)相除取余,并將余數(shù)存放在data數(shù)組中
while(x0)
{
data[index]?=?x%16;
x?=?x/16;
index++;
}
//?逆序輸出data數(shù)組中的元素,即為10進(jìn)制數(shù)對(duì)應(yīng)的16進(jìn)制數(shù)
for(i=index-1;?i=0;?i--)
printf("%d",?data[i]);
printf("\n");
}
十進(jìn)制轉(zhuǎn)化為十六進(jìn)制代碼:
#include?"stdio.h"?int?main()
{
int?num=0;
int?a[100];
int?i=0;
int?m=0;
int?yushu;
char?hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",num);?while(num0)?{?yushu=num%16;
a[i++]=yushu;
num=num/16;
}?printf("轉(zhuǎn)化為十六進(jìn)制的數(shù)為:0x");?for(i=i-1;i=0;i--)//倒序輸出?{m=a[i];
printf("%c",hex[m]);?}?printf("\n");
}
程序運(yùn)行結(jié)果:
擴(kuò)展資料:
進(jìn)制轉(zhuǎn)換由一組數(shù)碼符號(hào)和兩個(gè)基本因素“基數(shù)”與“位權(quán)”構(gòu)成。基數(shù)是指,進(jìn)位計(jì)數(shù)制中所采用的數(shù)碼(數(shù)制中用來(lái)表示“量”的符號(hào))的個(gè)數(shù)。位權(quán)是指,進(jìn)位制中每一固定位置對(duì)應(yīng)的單位值。
舉例:二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)
二進(jìn)制數(shù)第0位的權(quán)值是2的0次方,第1位的權(quán)值是2的1次方……
所以,設(shè)有一個(gè)二進(jìn)制數(shù):0110 0100,轉(zhuǎn)換為10進(jìn)制為:
下面是豎式:
0110 0100 換算成十進(jìn)制
第0位 0 * 20?= 0
第1位 0 * 21?= 0
第2位 1 * 22?= 4
第3位 0 * 23?= 0
第4位 0 * 24?= 0
第5位 1 * 25?= 32
第6位 1 * 26?= 64
第7位 0 * 27?= 0
公式:第N位2(N)
---------------------------
100
用橫式計(jì)算為:
0 * 20?+ 0 * 21?+ 1 * 22?+ 0 * 23?+ 0 * 24?+ 1 * 25?+ 1* 26?+ 0 * 27?= 100
0乘以多少都是0,所以我們也可以直接跳過(guò)值為0的位:
1 * 22?+ 1 * 25?+1*26?= 100
參考資料:
百度百科-進(jìn)制轉(zhuǎn)換