2016-04-26 10 views
1

ページ番号を抽出して基数10の数値からオフセットしようとしています。私は問題なくオフセットを抽出することができますが、ページ番号を取得しようとすると、単にオフセットが生成されます。ビットマスクを使用してページ番号を取得し、Cの基数10からオフセットを取得します

int PAGE_MASK = 255; 
int OFFSET_MASK = 63; 
int test_numbers[5] = { 36547, 342, 128, 1, 23650 }; 
int i; 
for(i = 0; i < 5; i++) { 
    int pg_offset = test_numbers[i] & OFFSET_MASK; 
    int pg_number = test_numbers[i] & PAGE_MASK; 
    printf("%s%d%s%d", "Page Number: ", pg_num, " Offset: ", pg_offset); 
} 

このコードを使用すると、正しいオフセットが得られますが、間違ったページ番号が表示されます。私はページ番号のビットを正しくシフトしようとしていましたが、それを動作させることができませんでした。また、プログラムは、すべてのページ番号が8ビットであり、すべてのオフセットが8ビットであると仮定しています。

+1

**これは**ベースではありません10.バイナリ演算は、ベース2またはベース16の強い表示です。 – MSalters

+1

[mcve]を入力してください。あなたは完全で検証可能ではありません。変数の値と期待した値を教えてください。 – user694733

答えて

1

私の理解するには、ページ番号が

int pg_number = address/(PAGE_MASK + 1); 

または代わり

int pg_number = address >> 8; 

することによって得ることができるが、これは実際にはマスキングではなく、実際の区分されていません。

+0

ありがとう!それは私の目的のために十分に機能します。 – Derek

関連する問題