c - 如何四舍五入C中的地址?
问题描述
假设我有一个地址为 0x7fffaf6aa87f 的 char* ptr,我如何将其四舍五入为 8 的倍数,使其成为 0x7fffaf6aa878?
或者如果它是 0x7fffaf6aa875,它会向下舍入到 0x7fffaf6aa870。
解决方案
&~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
推荐阅读
- javascript - 如何将参数传递给 JavaScript 函数中的匿名函数?
- javascript - Hexo 站点生成器 - 使用 PHP 页面的模板
- android - 应用程序无法将音频连接到耳机 Sinch App to App (Android)
- java - 我如何在java中对这个自定义arraylist进行排序,按包装箱数的降序排列
- r - 当尝试在对象列表中保存 R 对象时,R 表示找不到对象
- performance - 为什么我们可以处理父异常时使用多个捕获
- c++ - 有人可以解释在c++中通过指针传递和通过引用传递的目的是什么吗?
- sql - 需要一个 sql 来获取单次预订中支付最高金额的游客
- android - 来自模块的注释依赖不起作用
- reactjs - 如何更改数组中对象中的数组?