进制进制进制~转换

从刚学计算机就对进制转换有着莫名的反感,2进制 8进制 10进制 16进制各种转换。

下面就说下逻辑地址转换成物理地址的求法吧

首先,用户输入一个16进制的数字cin>>hex>>logic_add;   hex的意思是告诉计算机输入的数是以16进制方式输入的

这个时候你要是输出cout<<logic_add;  你会发现输出的是把这个16进制的数转换为10进制以后输出的结果

cout<<hext<<logic_add;这样输出的才是16进制。

经过以上对比,原来计算机不管你是以什么进制方式输出的最后都以10进制形式显示在你面前。

接着输入你的页面大小,如果是1kb=1024b=210

这时候用你的     逻辑地址/页面大小=页号.....页内地址

写这个的时候我觉得我自己笨的要死,我在想逻辑地址是16进制的  页面大小是10进制的一个数  他们之间相除用不用进制转换之类的,我就一直试啊在此期间不停的让他们进制统一!!!

一瞬间突然想明白了,在计算机里你无论是以什么方式什么进制输入的最后都变成2进制,不需要你自己转换进制,最后的商打印出的是10进制(在计算机内部算出的结果是2进制,默认输出的是10进制)。

哎,所以

cin>>hex>>logic_add;
int a=logic_add/page_size*1024;//页号

int b=logic_add%page_size*1024;//页内地址

这就完事了!!!!!!!!

之后你再去查页表找到对应的物理块号c

c*page_size+b;//物理地址,十进制的

cout<<hex<<c*page_size+b;//16进制的

 就是么简单,真是够了,有些时候特别简单的问题自己不认真思考真的是不能很好理解。

老师上课讲给一个逻辑地址:0A5C  页面大小1kb=210    

0A5C/2^10   商就是前6位  余数就是后10位   

这么理解:0A5C化成2进制一共16位0000 1010 0101 1100 除以2的10次方(2进制位100 0000 0000)就相当于十进制100除以10小数点向前移动1位

那么2^10  就是二进制的小数点向前移动10位  (整数小数在末尾)

不知道我说明白没~

欢迎指正~~~~

奋斗中的我,十一就不回家了~哎~~~所以挺闹心的,大家都走了,我也心不在焉。希望明天一切顺利

posted @ 2015-09-30 22:59  奋斗中的菲比  阅读(510)  评论(0编辑  收藏  举报