关于c语言里面的逻辑与在对不同大小的整数进行操作时的疑惑解决办法

关于c语言里面的逻辑与在对不同大小的整数进行操作时的疑惑
最近在看wrk
其中有一行这样的代码
C/C++ code
#define MI_GENERATE_VALID_WSLE(Wsle)                   \
    ((PVOID)(ULONG_PTR)((Wsle)->u1.Long & (~(PAGE_SIZE - 1) | 0x1)))

其中#define PAGE_SIZE 0x1000
首先我想知道page_size 和0x1 是按照双字节存储的么 如果她是按照双字节存储那这两个相或倒能理解
可是这两个或完了之后再跟一个长整型相与得到的是双字节还是四字节的数 
希望大家能够解答一下疑惑

------解决方案--------------------
整形数字常量,要是没有标明类型,都是以4字节有符号数储存的

0x1<------------------ int
0x2l<----------------- long
0x2ul<----------------unsigned long