首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

位運算技巧:快速對齊到 8 的倍數或 2 的 N 次方倍數

     編輯:關於C

對齊到 8 的倍數

假設變數 data 為無號整數,需向上取整到 8 的倍數:

aligned = ((data + 7) >> 3) << 3;

等價於:(data + 7) & ~7 或 (data + 7) & -8。

通用公式:對齊到 2n 的倍數

// n 為冪次,如 3 表示 8,4 表示 16
aligned = (data + (1 << n) - 1) & ~((1 << n) - 1);

或使用位移:

aligned = ((data + (1 << n) - 1) >> n) << n;

原理解析

  1. data + (2ⁿ - 1):確保若 data 不在邊界上,進位到下一個邊界。
  2. & ~(2ⁿ - 1):清除低 n 位,得到 2ⁿ 的倍數。
  3. 位移版本:右移 n 位捨去低位,左移 n 位補零,效果相同。

應用場景

  • 記憶體分配對齊(如 malloc、posix_memalign 參數)。
  • 結構體大小計算、緩衝區長度調整。
  • 硬體暫存器、DMA 傳輸長度對齊需求。

C++17 標準庫支援

#include <memory>
void* ptr = std::aligned_alloc(alignment, size);  // alignment 必須為 2 的冪次
// 或
std::align(alignment, size, ptr, space);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved