如何解决有没有更好的掩盖位的方法?
因此,我试图通过屏蔽十六进制数字将内存地址分为页号和偏移量部分。但是,要覆盖各种不同的位和页面大小的地址,我似乎不得不写很多嵌套的if语句。现在,我只有32位地址大小的4kib或64 kib验证。当然,有一种更好和更少重复的方法可以做到这一点。我是C的新手,所以谢谢您的帮助。
代码:
int main(void)
{
//MemoryAddress
unsigned int address = 0xFE03AC12;
//Address Space
unsigned int addressSize = calculateAddress(address);
//Calculating Page Size
unsigned int pageSize = 4096;
unsigned int bits = calculatePage(pageSize);
//Offset Mask
unsigned int offsetMask;
//Offset Masking Validation
bool isValid = true;
if (charCount == 8)
{
if (bits == 12 && addressSize == 32)
{
offsetMask = 0x00000FFF;
}
else if (bits == 16 && addressSize == 32)
{
offsetMask = 0x0000FFFF;
}
else
{
isValid = false;
printf("Invalid!");
}
}
else if (charCount == 4)
{
//Same code here
}
//Masking
unsigned int offset = address & offsetMask;
unsigned int vpn = address >> bits ;
if (isValid == true)
{
printf("%X \t%X",vpn,offset);
}
return 0;
}
解决方法
对于您的特定示例,您可以使用:
$
但这取决于您所说的“ 更好”是什么意思。 有很多不同方面,例如内存占用量,性能,可读性。
我认为问题中的代码比我提出的代码更具可读性,但效率可能较低。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。