分页地址变换 #include<iostream> #include<string> #include<cmath> using namespace std; #define pageSize 2048 #define addressBit 32 #define maxPageAddress 2048 #define maxPageCount 2097152 int BinaryToDecimal(string str) { int n=0; int i=0; int x=str.length(); while(str.length()-i!=0) { n=n+(int(str[x-1])-48)*pow((double)2,(double)i); i++; x--; } return n; } string DecimalToBinary(int x,int bitCount) { string string; int i; char *str=new char[bitCount]; for(i=0;i<bitCount;i++) { str[i]='0'; } int k=i-1; while(1) { str[k]=(char)(x%2+48); k--; if(x/2==0) { break; } x=x/2; } for(int j=0;j<bitCount;j++) { string=string+str[j]; } return string; } void ComputingMethod(int a[],int pageCount) { int p,w; int physicalAddress; int address; cout<<"请输入逻辑地址:"<<endl; cin>>address; p=address/pageSize; w=address%pageSize; if(p>pageCount) { cout<<"页号超出范围"; return; } else { physicalAddress=*(a+p)*pageSize+w; cout<<"物理地址为:"<<physicalAddress<<endl; } } void Spilt(int a[],int pageCount) { string p,w; int physicalAddress; int address; cout<<"请输入逻辑地址:"<<endl; cin>>address; string str=DecimalToBinary(address,32); p=str.substr(0,21); w=str.substr(21,11); int n=BinaryToDecimal(p); if(n>pageCount) { cout<<"页号超出范围"; return; } else { string str1=DecimalToBinary(*(a+n),21); cout<<"物理地址为:"<<str1+w<<endl; } } int main() { int pageCount; cout<<"输入页面数:"<<endl; cin>>pageCount; if(pageCount>maxPageCount) { cout<<"页面数超出最大页面量"<<endl; return 0; } else { int *p=new int[pageCount]; cout<<"输入物理快顺序:"<<endl; for(int i=0;i<pageCount;i++) { cin>>p[i]; } cout<<"输入对应数字选择方法:"<<endl; cout<<"1、计算法:"<<endl; cout<<"2、硬分拼接法:"<<endl; int n; while(cin>>n) { if(n==1) { ComputingMethod(p,pageCount); } else if(n==2) { Spilt(p,pageCount); } } return 0; } }