假設一個系統有一個具有8-kb頁面大小的64位虛擬地址。寫一個C-程序 ,它在命令行中傳遞一個虛擬地址(十進制),並讓它輸出給定地址的頁數 數字和偏移量。舉個例子,你的程序將運行如下: ./a.out 8219986 程序將輸出: 地址8219986包含: 頁碼:1003 偏移= 3410 所有的計算必須以二進制形式進行。解釋發生了什麼(C程序)
#include <stdio.h>
int main(int argc,char *argv[])
{
unsigned long long int MappedAdress = atoll(argv[1]);
unsigned long long int page = MappedAdress;
unsigned long long int offset = MappedAdress;
//print long long address
printf("The MappedAdress %llu contains:\n",MappedAdress);
//shift to right 13 bit to retrive pages, then print
page = page >> 13;
printf("Page Number : %llu\n",page);
//since it's 64-bit opr. Add offset AND 1FFF ,
offset = offset & 0x1FFF;
//print the offset
printf("Offset = %llu\n\n",offset);
return 0;
}
任何人都可以向我解釋剛剛發生的事情嗎?以及如果我沒有C語言背景,我該如何編寫這樣的程序,但是用Java編寫?
該代碼沒有什麼奇特的事情發生。如果你根本不認識C,拿起一本書。至於翻譯爲Java:請首先嚐試自己實現這一點。如果卡住了,請顯示您擁有的Java代碼。 – Mat
查看C中的>>和'&'運算符,以及'8-kb'或8192與'13'有什麼共同之處。然後,您應該能夠完成作業。提示 - Java中的操作符非常相似。 –