unsigned int _crol(unsigned int value, int shift);
// 返回 value 循環左移 shift 位後的結果
// 配套函數:_cror (循環右移)
假設 32 位無符號整數 `value = 0x80000001` (二進制 `1000...0001`),`_crol(value, 1)` 過程:
#include <stdint.h>
uint32_t rotl32(uint32_t x, int n) {
n %= 32; // 防止移位量 >= 位寬導致未定義行為
return (x << n) | (x >> (32 - n));
}
uint32_t rotr32(uint32_t x, int n) {
n %= 32;
return (x >> n) | (x << (32 - n));
}