请帮助我理解指针值的这种按位操作

pas*_*ena 2 c c++ bit-manipulation

我无法理解为什么addr被长时间类型化,然后用表达式补充..基本上涉及peekAddr计算的整行

void *addr;
char *peekAddr ;
peekAddr = (char *) ((long)addr & ~(sizeof(long) - 1 ) ) ;
peekWord = ptrace( PTRACE_PEEKDATA, pid, peekAddr, NULL ) ;
Run Code Online (Sandbox Code Playgroud)

faz*_*azo 5

sizeof (long)     = (0)00000100
sizeof(long)-1    = (0)00000011
~(sizeof(long)-1) = (1)11111100
Run Code Online (Sandbox Code Playgroud)

所以2位设置为0使地址对齐到4个字节.另外,当地址已经增加sizeof(long)-1时,它主要被使用