Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分层分页地址掩码_C_Bit Manipulation_Paging_Bitmask - Fatal编程技术网

C 分层分页地址掩码

C 分层分页地址掩码,c,bit-manipulation,paging,bitmask,C,Bit Manipulation,Paging,Bitmask,我遇到了以下c代码,它打算在32位机器上运行,并在2-hierarchical-paging中为页面目录地址和页面表地址生成位掩码: #define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff)) #define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff)) 两个函数不都返回相同的结果吗 20 bits 12 bits +--------------+--------+ | 1...

我遇到了以下c代码,它打算在32位机器上运行,并在2-hierarchical-paging中为页面目录地址和页面表地址生成位掩码:

#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))
两个函数不都返回相同的结果吗

   20 bits       12 bits
+--------------+--------+
| 1...........1|0......0|
+--------------+--------+
32           12 11     0

好问题!它们可能看起来是一样的,但:

#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))

int main()
{  
    uint64_t a = PAGE_DIRECTORY_ADDRESS_MASK;
    uint64_t b = PAGE_TABLE_ADDRESS_MASK;

    if (PAGE_DIRECTORY_ADDRESS_MASK != PAGE_TABLE_ADDRESS_MASK)
        printf("Different: %llx %llx\n",PAGE_DIRECTORY_ADDRESS_MASK, PAGE_TABLE_ADDRESS_MASK);

    if (a != b)
        printf("Different! %llx %llx\n",a, b);

    return 0;        
}

您对
uint64\u t
使用了错误的格式修改器。无法保证
uint64\u t
unsigned long
相同,它可能是
unsigned long
。改用标准。@Someprogrammerdude谢谢你的评论!说得好!我已将代码调整为使用
“%llx”
“ll”长度修饰符已添加到
C99中的
标准C
Different: fffffffffffff000 fffff000                                                                                                         
Different! fffffffffffff000 fffff000