c++中怎么使一个十进制的数转为2进制,4进制,8进制,16进制? C++函数,完成将一个十进制数转换成2、8、16进制数,有没...

c++\u4e2d\u600e\u4e48\u4f7f\u4e00\u4e2a\u5341\u8fdb\u5236\u7684\u6570\u8f6c\u4e3a2\u8fdb\u5236\uff0c4\u8fdb\u5236\uff0c8\u8fdb\u5236\uff0c16\u8fdb\u5236

\u4e0d\u597d\u610f\u601d\uff0c\u90a3\u4e0d\u662f\u8f6c\u6362
\u90a3\u662f\u4ec0\u4e48\u5f62\u5f0f\u8f93\u51fa
\u6211\u8981\u544a\u8bc9\u4f60\u4e8c\u8fdb\u5236\u7ed9\u4eba\u770b\u3002
\u4ed6\u53ef\u4ee5\u7406\u89e3\u8ba1\u7b97\u673a\u8fd0\u884c\u8fc7\u7a0b\u3002
\u673a\u5668\u53ef\u4e0d\u7ba1\u662f\u4e0d\u662f\u4e8c\u8fdb\u5236\uff0c\u4ed6\u53ea\u5728\u4e8e\u5927\u5c0f

/*
10\u8fdb\u5236\u7684160\u8f6c\u6362\u4e3a 2\u8fdb\u5236\u662f : 10100000
10\u8fdb\u5236\u7684160\u8f6c\u6362\u4e3a 4\u8fdb\u5236\u662f : 2200
10\u8fdb\u5236\u7684160\u8f6c\u6362\u4e3a 8\u8fdb\u5236\u662f : 240
10\u8fdb\u5236\u7684160\u8f6c\u6362\u4e3a16\u8fdb\u5236\u662f : A0
Press any key to continue
*/
#include

// \u5c06\u6574\u6570\u8f6c\u6362\u4e3a\u4ee5base\u4e3a\u57fa\u7684\u5b57\u7b26\u4e32\uff0c\u5e76\u8fd4\u8be5\u4e32\u30022 <= base <= 36
char *convert(unsigned num,int base,char *s) {
unsigned int ch,i,t,n = 0;
while(num) {
ch = num%base;
if(ch >= 10) s[n] = ch - 10 + 'A';
else s[n] = ch + '0';
num /= base;
++n;
}
s[n] = '\0';
for(i = 0; i < n / 2; ++i) {
t = s[i];
s[i] = s[n - 1- i];
s[n - 1 - i] = t;
}
return s;
}

int main() {
int num = 0XA0;
char s[81];
printf("10\u8fdb\u5236\u7684%d\u8f6c\u6362\u4e3a%2d\u8fdb\u5236\u662f : %s\n",num,2,convert(num,2,s));
printf("10\u8fdb\u5236\u7684%d\u8f6c\u6362\u4e3a%2d\u8fdb\u5236\u662f : %s\n",num,4,convert(num,4,s));
printf("10\u8fdb\u5236\u7684%d\u8f6c\u6362\u4e3a%2d\u8fdb\u5236\u662f : %s\n",num,8,convert(num,8,s));
printf("10\u8fdb\u5236\u7684%d\u8f6c\u6362\u4e3a%2d\u8fdb\u5236\u662f : %s\n",num,16,convert(num,16,s));
return 0;
}

先将十进制转换成2进制,再由2进制转换成4、8、16进制
存放转换后的2、4、8、16进制的数组为字符串,方便显示。
数制之间的转换,十进制先转换为2进制,输入十进制到int型变量x中,一直进行x/2并取模x%2直到x=0,放到数组a[]中,代码实现为
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
数组a[]便是x的2进制的倒序,将a[]倒序并转换为字符放到b[]中,代码实现
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
其中+48是将整型数转换为字符型
其次就要将2进制转换成4、8、16进制,从低位算起,所以用数组a[]来计算
2进制转4进制,用两位比特(0或1)2进制转换成4进制,如10=1*2+0=2,11=1*2+1=3,代码实现
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]*2+48;
c[i/2+rem(i,2)]=0;
其中c[i/2+rem(i,2)]=0;语句是赋值给字符串结束符,rem是调用我自己写的函数,原型为
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
作用是计算二进制的位数是否是2的倍数,是则返回0,否则返回1
2进制转8进制,用三位比特转换,如101=1*4+0*2+1=5,110=1*4+1*2+0=6,代码实现
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]*2+a[j+2]*4+48;
d[i/3+rem(i,3)]=0;
2进制转换为16进制,1101=1*8+1*4+0*2+1=13,即16进制的D,
取str[]="0123456789ABCDEF",16进制的值即为str字符串的下标,如str[13]=D,将1101最终转换为D,代码实现为
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]*2+a[j+2]*4+a[j+3]*8];
e[i/4+rem(i,4)]=0;
————————————————————————————
全部代码:
#include<iostream.h>
int rem(int a,int b)
{
if(a%b==0)return 0;
else return 1;
}
void main()
{
int i=0,j,k,x,a[50];
char b[50],c[20],d[20],e[20],str[]="0123456789ABCDEF";
cout<<"整数:"<<flush;
cin>>x;
for(j=0;j<50;j++)
a[j]=0;
while(x!=0)
{
a[i++]=x%2;
x=x/2;
}
for(j=0;j<i;j++)
b[j]=a[i-j-1]+48;
b[i]=0;
for(k=i/2+rem(i,2),j=0;j<i;j+=2)
c[--k]=a[j]+a[j+1]*2+48;
c[i/2+rem(i,2)]=0;
for(k=i/3+rem(i,3),j=0;j<i;j+=3)
d[--k]=a[j]+a[j+1]*2+a[j+2]*4+48;
d[i/3+rem(i,3)]=0;
for(k=i/4+rem(i,4),j=0;j<i;j+=4)
e[--k]=str[a[j]+a[j+1]*2+a[j+2]*4+a[j+3]*8];
e[i/4+rem(i,4)]=0;
cout<<"二进制:"<<b<<endl;
cout<<"四进制:"<<c<<endl;
cout<<"八进制:"<<d<<endl;
cout<<"十六进制:"<<e<<endl;
}
——————————————————————————
编译通过,运行成功,请采纳!

你是做一个程序来达到这个效果 还是说就是光计算怎么转换

  • c璇█鍗佽繘鍒惰浆鍖涓哄崄鍏繘鍒
    绛旓細char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};printf("璇疯緭鍏涓涓崄杩涘埗鏁锛");scanf("%d",&num); while(num>0) { yushu=num%16;a[i++]=yushu;num=num/16;} printf("杞寲涓哄崄鍏杩涘埗鐨勬暟涓猴細0x"); for(i=i-1...
  • 銆c璇█銆戣緭鍏涓涓崄杩涘埗鏁,杞崲鎴愬搴旂殑鍏繘鍒舵暟鍜屽崄鍏繘鍒舵暟骞...
    绛旓細int x,int n){int a[33],i; for(i=0;x;x/=n)a[i++]=x%n; for(i--;i>=0;i--) if(a[i]<10)printf("%d",a[i]); else printf("%c",a[i]+55); printf("\n");}int main(){int x; scanf("%d",&x); printf("%d鐨勫叓杩涘埗锛",x);dec2n(x,8)...
  • c璇█缂栧啓涓涓绋嬪簭,灏嗗崄杩涘埗鏁存暟n 杞崲鎴愪簩杩涘埗鏁
    绛旓細include <stdio.h> int transfer(int x){ int p=1,y=0,yushu;while(1){ yushu=x%2;x/=2;y+=yushu*p;p*=10;if(x<2){ y+=x*p;break;} } return y;} void main(){ //杩涘埗杞崲鍑芥暟鐨勫0鏄 int transfer(int x);int x;printf("璇疯緭鍏涓涓崄杩涘埗鏁:");scanf("%d",&x);pri...
  • c++涓庝箞浣夸竴涓崄杩涘埗鐨勬暟杞负2杩涘埗,4杩涘埗,8杩涘埗,16杩涘埗?
    绛旓細b[j]=a[i-j-1]+48;b[i]=0;鍏朵腑+48鏄皢鏁村瀷鏁拌浆鎹涓哄瓧绗﹀瀷 鍏舵灏辫灏2杩涘埗杞崲鎴4銆8銆16杩涘埗锛屼粠浣庝綅绠楄捣锛屾墍浠ョ敤鏁扮粍a[]鏉ヨ绠 2杩涘埗杞4杩涘埗锛岀敤涓や綅姣旂壒锛0鎴1锛2杩涘埗杞崲鎴4杩涘埗锛屽10=1*2+0=2,11=1*2+1=3锛屼唬鐮佸疄鐜 for(k=i/2+rem(i,2),j=0;j...
  • C璇█绋嬪簭鍗佽繘鍒剁殑鏁版庝箞杞崲鎴愬叓杩涘埗鐨勬暟?
    绛旓細include <stdio.h> include <math.h> void main(){ int n,a,sum = 0,i =0;printf("鍗佽繘鍒杈撳嚭涓涓暟n\n");scanf("%d",&n);while(n){ a = n%8;n = n/8;sum += a*pow(10,i);i++;} printf("鍏繘鍒惰緭鍑簊um:%d",sum);} ...
  • 璇烽棶鍦C璇█涓,濡備綍灏嗕竴涓崄杩涘埗鏁拌浆鍖涓哄叓浣嶄簩杩涘埗鐨勬暟?
    绛旓細鍙互鐢ㄥ嚱鏁癷toa灏嗗崄杩涘埗鏁拌浆鎹鎴愬搴斾簩杩涘埗鏁扮殑瀛楃涓诧紝鐒跺悗鍦ㄨ緭鍑鸿瀛楃涓层俰nt num= 15锛沜har str[8];itoa(num,str,2);printf(str);鍏朵腑itoa鍑芥暟鐨勭涓変釜鍙傛暟灏辨槸浣犺杞崲鐨杩涘埗鏁般
  • 浠庨敭鐩樿緭鍏涓涓崄杩涘埗鏁,灏鍏杞崲鎴愮瓑鍊肩殑浜岃繘鍒舵暟 C璇█绋嬪簭鎬庝箞...
    绛旓細jnz l2 ;濡傛灉涓嶆槸1锛屽垯l2,杈撳嚭0 mov dl,'0'mov ah,02h int 21h ;杈撳嚭1 jmp l3 l2: mov dl,'1'mov ah,02h int 21h ;杈撳嚭0 l3: shl bl,1 ;al閫昏緫宸︾Щ锛屽皢娆¢珮浣嶇Щ鍔ㄥ埌鏈楂樹綅 dec cl jnz l1 mov ah,4ch int 21h code ends end start 杩欐槸姹囩紪璇█鐨勭畻娉 ...
  • 鐢c璇█缂栫▼,杩涘埗杞崲鐨瀹炵幇
    绛旓細锛2锛夌洿鎺ユ硶锛氬叓杩涘埗鏄敱浜岃繘鍒惰鐢熻屾潵鐨勶紝鍥犳鍙互閲囩敤涓鍗佽繘鍒惰浆鎹涓轰簩杩涘埗鐩哥被浼肩殑鏂规硶锛岃繕鏄暣鏁伴儴鍒嗙殑杞崲鍜屽皬鏁伴儴鍒嗙殑杞崲锛屼笅闈㈡潵鍏蜂綋璁茶В涓涓嬶細鈶犳暣鏁伴儴鍒 鏂规硶锛氶櫎8鍙栦綑娉曪紝鍗虫瘡娆″皢鏁存暟閮ㄥ垎闄や互8锛屼綑鏁颁负璇ヤ綅鏉冧笂鐨勬暟锛岃屽晢缁х画闄や互8锛屼綑鏁板張涓轰笂涓涓浣嶆潈涓婄殑鏁帮紝杩欎釜姝ラ涓鐩存寔缁笅鍘伙紝...
  • c璇█缂栫▼鎬庝箞瀹炵幇杩涘埗杞崲?
    绛旓細锛2锛夌洿鎺ユ硶锛氬叓杩涘埗鏄敱浜岃繘鍒惰鐢熻屾潵鐨勶紝鍥犳鍙互閲囩敤涓鍗佽繘鍒惰浆鎹涓轰簩杩涘埗鐩哥被浼肩殑鏂规硶锛岃繕鏄暣鏁伴儴鍒嗙殑杞崲鍜屽皬鏁伴儴鍒嗙殑杞崲锛屼笅闈㈡潵鍏蜂綋璁茶В涓涓嬶細鈶犳暣鏁伴儴鍒 鏂规硶锛氶櫎8鍙栦綑娉曪紝鍗虫瘡娆″皢鏁存暟閮ㄥ垎闄や互8锛屼綑鏁颁负璇ヤ綅鏉冧笂鐨勬暟锛岃屽晢缁х画闄や互8锛屼綑鏁板張涓轰笂涓涓浣嶆潈涓婄殑鏁帮紝杩欎釜姝ラ涓鐩存寔缁笅鍘伙紝...
  • c璇█鈥滄妸鍗佽繘鍒舵暟杞崲鎴愬叓杩涘埗鏁扳鎬庝箞鍐
    绛旓細include<stdio.h>#include<string.h>main(){int i,m,n,s=0,t=1;char a[100],b[100]; gets(a);//鐢ㄥ洖杞﹀垎鍓 scanf("%d%d",&n,&m); //杈撳叆鐨勮繘鍒跺拰鎯宠杞崲鐨杩涘埗 for(i=strlen(a)-1;i>=0;i--)//鍏堣浆10杩涘埗 {if(n!=16) s+=(a[i]-48)*t;else s+=(a[i]-55)*...
  • 扩展阅读:c++十进制转换为二进制 ... c++十进制直接转二进制 ... 进制转换器 ... c++ 十进制转16进制 ... c++十进制转十六进制 ... c++怎么输出二进制数 ... 十进制计算器 ... 十进制对照表 ... c实现十进制转为二进制 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网