標籤:
從剛學電腦器就對進位轉換有著莫名的反感,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位 (整數小數在末尾)
不知道我說明白沒~
歡迎指正~~~~
奮鬥中的我,十一就不回家了~哎~~~所以挺鬧心的,大家都走了,我也心不在焉。希望明天一切順利
進位進位進位~轉換