首页 > 解决方案 > 如何四舍五入C中的地址?

问题描述

假设我有一个地址为 0x7fffaf6aa87f 的 char* ptr,我如何将其四舍五入为 8 的倍数,使其成为 0x7fffaf6aa878?

或者如果它是 0x7fffaf6aa875,它会向下舍入到 0x7fffaf6aa870。

标签: cpointers

解决方案


&~7

#include <stdio.h>
#include <stdint.h>

int main(void) {
    uintptr_t x = 0x7fffaf6aa87f;
    uintptr_t y = x&~7;
    
    printf("%p\n", y);
    
    x = 0x7fffaf6aa875;
    y = x&~7;
    printf("%p\n", y);
    
    return 0;
}

结果:

Success #stdin #stdout 0s 5368KB
0x7fffaf6aa878
0x7fffaf6aa870

推荐阅读