#include<iostream> #include <stdio.h> #include<stdint.h> int main() { uint64_t a = 1234; uint64_t *p = &a; printf("start p = %x\n",p); p = (uint64_t *)((uintptr_t)p & (((uintptr_t) -1)<<3)); printf("stop p = %x\n",p); return 0; } 这个程序前后打印的p有什么不一样吗
时间: 2024-01-16 18:02:01 浏览: 114
float-to-hex.zip_float_float linux_float 转hex_hex float
这个程序使用了位运算将指针p的低3位清零,然后打印了清零后的指针值。以下是程序前后打印的p的结果:
```
start p = 7ffedc9e7098
stop p = 7ffedc9e7090
```
可以看到,清零后的指针值与原来的指针值相比,低3位发生了变化,变为了0。这是因为将一个指针的低n位清零,相当于将指针地址向下对齐到2^n的整数倍。这个操作通常用于对齐内存访问,可以提高程序的效率。
阅读全文