关于数值进制以及进制之间转化问题
C++代码如何实现不同进制的转化以十进制与八进制和转换为例
递归方法
#include <iostream> using namespace std; int sb(int n) { if(n<8)return n; else return n%8+10*(sb(n/8));//递归思想关于进制转化 } int main() { int n; cin>>n; //获取10进制数 cout<<sb(n)<<endl; //利用递归函数 return 0; }
循环方法
#include<iostream> using namespace std; long long sum=0,b=1,x=1; int a; int main() { cin>>a; while(a!=0) { sum=sum+(a%8)*x; a/=8; //a=a/8 x*=10; //x=x/10 } cout<<sum<<endl; return 0; }
10转16进制
10转16进制 #include<iostream>using namespace std; char exchange(int n) { switch(n) { case 0: return '0';break; case 1: return '1';break; case 2: return '2';break; case 3: return '3';break; case 4: return '4';break; case 5: return '5';break; case 6: return '6';break; case 7: return '7';break; case 8: return '8';break; case 9: return '9';break; case 10: return 'A';break; case 11:return 'B';break; case 12:return 'C';break; case 13:return 'D';break; case 14: return 'E';break; case 15:return 'F';break;}} int main(){ int m,note,i=0,s=0; cin>>m; note=m; while(m/16!=0) { i++; m=m/16; } char a[i]; while(note/16!=0) { a[s]=exchange(note%16); s++; note=note/16; } a[i]=exchange(note); for(int j=i;j>=0;j--) {cout<<a[j]; }cout<<endl; return 0;}
为什么会有不同进制
进制的产生一定是为了更好的表达或记录。
在我们的生活中表达某个数的时候,比如成绩多少,这样的数都是十进制数。十进制数有10个数0,1,2,3,4,5,6,7,8,9。 十进制“逢十进一”这个大家都知道,生活中也有其它进制,比如时间的分秒数是60进制,角度是360度进制。 而在计算机里使用二进制的,因为计算机只能表示两个状态0,1,(0好比开关关,1可以表示成开关接通)。所以计算机只能“认识”二进制数。二进制“逢二进一”。 大家可能也知道还有八进制、十六进制,哪为什么有二进制还要其它进制? 可以想下,人类用十进制,计算机用二进制,但如果想要更好的去研究和理解计算机的运作时,光用二进制表达和描述会非常不直观、不方便。因为二进制太长了,比如一个整数(十进制),32位机中二进制有32位。如果用十六进制就只要8位,表达和描述上会方便很多,互转时也可以直接转,不像十进制哪样复杂。(因为8,16,是2的3,4次方)
不同进制的表示方法及转换运算
BIN 二进制 OCT八进制 DEC十进制 HEX十六进制
十进制转二进制使用短除法:
二进制转十进制位权展开法:
二进制转八进制:将3位转为1位
八进制转二进制:变1位为3位
二进制转十六进制:4位转1位
十六进制转二进制:1位变4位
举个栗子吧