進制轉化編譯
⑴ 利用類模板編譯將十進制轉化二進制
十進制轉二進制可以使用庫函數itoa。
itoa函數原型:char*itoa(int value,char*string,int radix);
功能:將任意類型的數字轉換為字元串。在<stdlib.h>中與之有相反功能的函數是atoi。
nt value 被轉換的整數,char *string 轉換後儲存的字元數組,int radix 轉換進制數,如2,8,10,16 進制等。
參考代碼:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0;
}
/*
1010
*/
⑵ 求c語言編譯下,十進制轉換為二進制,八進制,十六進制的程序
#include <iostream>
using namespace std;
int main()
{
int n,x,i=1,num=0;
cin>>n; //輸入十進制數n
while(n!=0)
{
x=n % 2;
num=num+x*i;
i=i*10;
n=n/2;
}
cout<<num<<endl; // 輸出二進制數
return 0;
}
這是C++程序,和C語言差不多
而轉換為八進制,十六進制,就直接把2改為8或16就可以了
⑶ 在c++中如何編譯一個程序進行進制轉換
寫一個進制轉換的程序代碼,然後編譯運行。
⑷ 用C語言編寫二進制轉換十進制的程序。
1、為了完成進制的轉換,在主函數中聲明了個函數Sum,主要用於將二進制的每一位轉換為十進制後的數相加,返回值就是相加後的和。另外定義了一個數組array[8],用於存放輸入的八位二進制數。
⑸ C語言編譯中的進制轉換問題
#include <stdio.h>
#include <string.h>
void ttor(int n, int r)
{
if (n)
{
ttor(n / r, r);
printf("%c", n % r > 9 ? n % r - 10 + 'A' : n % r + '0');
}
}
int main(void)
{
int n;
int r;
while (scanf("%d%d", &n, &r) != EOF)
{
if (n > 0)
ttor(n, r);
else if (!n)
putchar('0');
else
{
putchar('-');
ttor(-n, r);
}
putchar('\n');
}
return 0;
}
⑹ c語言編程 把十進制轉換為十六進制
方法一:
#include<iostream>
#include <string>
using namespace std;
string DecIntToHexStr(long long num)
{ string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str +=
DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str;}
string DecStrToHexStr(string str){ long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec =
Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec);}int main()
{ string DecStr; while (cin >> DecStr) { cout << "0x" + DecStrToHexStr(DecStr); } return 0;}
方法二:
#include<iostream>
#include <string>
#include<vector>
#include <sstream>
#include <math.h>
using namespace std;int main()
{ string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) { int bit = num % 2; v.push_back(bit); num = num / 2; }
reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) { for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i +
1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10); } }
else { int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for
(int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; }
if (temp <= 9) { stringstream ss; string strTemp;
ss << temp; ss >> strTemp; hexStr += strTemp; } else hexStr += ('A' + temp - 10); } } cout << hexStr << endl; return 0;}
(6)進制轉化編譯擴展閱讀:
還有3種方式可以實現,其中兩種是使用系統函數,另一種是直接自己編寫。
下面的代碼就是3種方式的實現,包括2位的整數和任意整數(2的31次方以內)都可以。可自己選擇需要的實現方式。
利用系統函數有
1. char * itoa ( int value, char * str, int base );value是要轉化的數字,str是轉化後的字元串存儲的位置,base是進制數(但是這個函數不是標准C函數,有些編譯器是不支持的!)。所以代碼可以為:
char buffer [33]; //用於存放轉換好的十六進制字元串,可根據需要定義長度 char * inttohex(int aa){ itoa (aa, buffer, 16); return (buffer);}
2. sprintf(str,"%x",value);str是轉化存儲的位置,%x表示十六進制格式,value是要轉化的數字。所以代碼可以為:
char buffer [33]; //用於存放轉換好的十六進制字元串,可根據需要定義長度 char * inttohex(int aa){ sprintf(buffer, "%x", aa); return (buffer);}
3. 自己編寫
如果參數只要兩位數的整數,那麼很簡單。
代碼如下:
#include <stdio.h>#include <stdlib.h> char buffer [33]; //用於存放轉換好的十六進制字元串,可根據需要定義長度 char * inttohex(int aa)
{ sprintf(buffer, "%x", aa); return (buffer);} int main ()
{ int num; char * hex_str; printf ("Enter a number: "); scanf ("%d",&num); hex_str = inttohex (num); printf ("Hexadecimal number: %sH ", hex_str); return 0;}
⑺ 編譯原理二進制轉化成十進制文法
二轉10如1101 1111 的演算法為
(1)*2^7+(1)*2^6+(0)*2^5+(1)*2^4 +(1)*2^3 +(1)*2^2 +(1)*2^1+(1)*2^0
可以寫一個循環進行公式相加,得到轉換後的10進制
如果你的意思是反匯編二進制文件為匯編語言的話.網路搜索:bin文件反匯編,有詳細教程
10轉2的話寫一個循環把數除2並存儲余(%)2的數據到數組中,
orC語言的math.h或Cpp的math有itoa函數可以進行10轉2
⑻ 使用C++編譯不同進制間的相互轉換,必須使用數組
//我給出功能函數,主函數你自己寫吧
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
/*將一個整型數字轉化成字元型數字,例如 8->'8',12->'c'*/
char numToChar(char num)
{
/*num是0到9之間的數字*/
if(num<=9&&num>=0)
{
num+=48;
}
/*num是10到15之間的數字*/
else
{
switch(num)
{
case 10:num='A';
case 11:num='B';
case 12:num='C';
case 13:num='D';
case 14:num='E';
case 15:num='F';
}
}
return num;
}
/*將一個字元型數字轉化成整型數字,例如 '8'->8,'c'->12*/
int charToNum(char &num)
{
/*num是0到9之間的字元型數字*/
if(num<='9'&&num>='0')
{
num-=48;
}
/*num是'A'到'F'之間的字元型數字*/
else
{
switch(num)
{
case 'A':
case 'a':
num=10;
case 'B':
case 'b':
num=11;
case 'C':
case 'c':
num=12;
case 'D':
case 'd':
num=13;
case 'E':
case 'e':
num=14;
case 'F':
case 'f':
num=15;
}
}
return num;
}
/*將任意進制整數轉化為十進制整數,返回轉化後的十進制整數,num為任意進制整數,binary為該整數的進制*/
int anyBinaryToDecimal(string num,int binary)
{
int len=num.size();
int decimal_num=0;
for(int i=0;i<len;i++)
{
decimal_num+=charToNum(num[i])*pow(binary,len-i-1);
}
return decimal_num;
}
/*將十進制轉化為任意進制,decimal為十進制整數,binary為需要轉化的進制*/
void decimalToAnyBinary(int decimal,int binary)
{
string result;//保存x進制數
char temp;
while(decimal>0)
{
temp=decimal%binary;
result+=numToChar(temp);
decimal=decimal/binary;
}
/*輸出轉化後的x進制整數*/
for(int i=result.size()-1;i>=0;i--)
cout<<result[i];
cout<<endl;
}
⑼ C語言 將十進制數轉化為二進制數 程序代碼
#include <stdio.h>
void main()
{
int a;
scanf(\"%d\",&a);//輸入一個10進制數。
int result=0;//存儲a的二進制結果。
int p=1;//p=1表示個位數
do
{
int b=a%2;//b是余數,第一個余數是二進制的個位。
result=result+p*b;
p=p*10;//*10表示下個是10位數。
a=a/2;
}while(a);
printf(\"\\n%d\\n\",result);
}
程序在vc6.0下編譯通過可以直接用,你自己看看吧,思路是a%2的結果是二進制的個位數,(a/2)%2的結果是二進制的十位數所以p擴大10倍,以後依次類推。
⑽ 16進制轉10進制編程
/* 十六進制數轉換為十進制數 *
/long hexToDec(char *source){long sum = 0;
long t = 1;int i, len;
len = strlen(source);for(i=len-1; i>=0; i--){sum += t * getIndexOfSigns(*(source + i));
t *= 16;}return sum;}
/* 返回ch字元在sign數組中的序號 *
/int getIndexOfSigns(char ch)
{if(ch >= '0' && ch <= '9'){return ch - '0';}
if(ch >= 'A' && ch <='F')
{return ch - 'A' + 10;}if(ch >= 'a' && ch <= 'f')
{return ch - 'a' + 10;}return -1;}
(10)進制轉化編譯擴展閱讀:
計算機對除機器語言以外的源程序不能直接識別、理解和執行,都必須通過某種方式轉換為計算機能夠直接執行的。
編譯方式下,首先通過一個對應於所用程序設計語言的編譯程序對源程序進行處理,經過對源程序的詞法分析、語法分析、語意分析、代碼生成和代碼優化等階段將所處理的源程序轉換為用二進制代碼表示的目標程序。
然後通過連接程序處理將程序中所用的函數調用、系統功能調用等嵌入到目標程序中,構成一個可以連續執行的二進制執行文件。調用這個執行文件就可以實現程序員在對應源程序文件中所指定的相應功能。