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

C 語言位運算實現循環移位:原理、通用公式與代碼模板

     編輯:C 語言基礎

循環移位 vs 普通移位

  • 普通移位:移出的位丟失,低位/高位補 0。
  • 循環移位:移出的位從另一端補回,無數據丟失。

8 位示例:a = 01111011 循環左移 2 位

  1. b = a >> (8-2) → 取出高 2 位 00000001(即將被移出的位)。
  2. a = a << 2 → 左移得 11101100。
  3. a = a | b → 合併得 11101101(正確結果)。

單行寫法:a = (a >> (8-2)) | (a << 2);

通用公式(總位寬 N = 8/16/32)

  • 循環左移 n 位:(a >> (N-n)) | (a << n)
  • 循環右移 n 位:(a << (N-n)) | (a >> n)

C 代碼模板

// 32 位無符號整數循環左移
uint32_t rotl32(uint32_t x, int n) {
    n &= 31;  // 防止 n >= 32 導致未定義行為
    return (x << n) | (x >> (32 - n));
}

// 32 位無符號整數循環右移
uint32_t rotr32(uint32_t x, int n) {
    n &= 31;
    return (x >> n) | (x << (32 - n));
}

工程應用場景

  • 加密算法(DES、AES、MD5、SHA 等大量使用循環移位)。
  • 校驗和計算、哈希函數、隨機數生成器。
  • 嵌入式位帶操作、協議解析、圖像處理位平面操作。

掌握循環移位模板,是編寫高性能系統級 C 代碼的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved