使用位掩码获取页码和 C 中以 10 为基数的偏移量
Using a bitmask to get page number and offset from a base 10 number in 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 位。
据我了解,页码可以通过
获取
int pg_number = address / (PAGE_MASK + 1);
或者
int pg_number = address >> 8;
但这实际上不是屏蔽,而是实际的划分。
我正在尝试从以 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 位。
据我了解,页码可以通过
获取int pg_number = address / (PAGE_MASK + 1);
或者
int pg_number = address >> 8;
但这实际上不是屏蔽,而是实际的划分。