#include <iostream> using namespace std; char int2char(int); void int2Binary(int n,int *arr); void printBinary(int *bit,int nbit); void Binary2Hex(char Hex[],int *bit,int nbit); int main() { const int BIT=32; int arr_bit[BIT]= {0}; char Hex[128]= {'/0'}; unsigned int n; cout<<"输入(0)退出. "; cout<<"请输入一个 "<<BIT<<" 位数:"; cin>>n; while (n) { cout<<"/n/n10进制: "<<n<<endl; int2Binary(n,arr_bit); cout<<" 2进制:"; printBinary(arr_bit,BIT); cout<<"16进制:"; Binary2Hex(Hex,arr_bit,BIT); cout<<" "<<Hex<<"/n/n"<<endl; cout<<"输入(0)退出. "; cout<<"请输入一个 "<<BIT<<" 位数:"; cin>>n; } return 0; } // 1-9 返回'1'-'9' // 10-15 返回'A'-'F' char int2char(int i) { char c='/0'; if (i<=15 && i>=10) { c=char(55+i); // 'A' ASCII为65 } else { c=char(i+48); // '0' ASCII为48 } return c; } //① 整数部分 //方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数, //而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止, //最后读数时候,从最后一个余数读起,一直到最前面的一个余数。 void int2Binary(int n,int *arr) { while(n!=0) { *arr=n%2; n=n/2; ++arr; } } void printBinary(int *bit,int nbit) { for (int i=nbit-1; i>=0; --i) { if ((i+1)%4==0) cout<<" "; cout<<bit[i]; } cout<<endl; } void Binary2Hex(char Hex[],int *bit,int nbit) { int a[4]= {8,4,2,1}; int k; int tmp,n=0; k=nbit-1; Hex[n]='0'; Hex[n+1]='x'; n=n+2; for (int i=0; i<nbit/8; ++i) { for (int t=0; t<2; ++t) { tmp=0; for (int j=0; j<4; ++j) { if (bit[k]!=0) tmp=tmp+a[j]; --k; } Hex[n]=int2char(tmp); ++n; } } }