如何快速判断一个数是否为16的倍数

  • 当我们使用aligned_malloc获得内存按16对齐的指针时,我们需要判断返回的指针是否正确,即指针地址是否为16的倍数。
  • 如何快速判断一个数是否为16的倍数?
  • 简化先思考如何判断一个数为2的倍数?只要它的二进制最后1位为0即可。
  • 如何判断一个数为4的倍数?只要它的二进制最后2位为0即可。
  • 如何判断一个数为8的倍数?只要它的二进制最后4位为0即可。
  • 如何判断一个数为16的倍数?只要它的二进制最后4位为0即可。
int *p;
int(p)&16==0;	// 判断指针p指向内存是否按16对齐
  • 为什么要使用按位与&呢?
  • 如果一个二进制数最后4位为0,则它与(16-1)按位与得到的值一定为0。

你可能感兴趣的:(C++,c++,算法)