C+中循環(huán)移位(旋轉(zhuǎn))操作的最佳實踐左移和右移操作符(<和>)已經(jīng)在C+中可用。然而,我無法找到如何執(zhí)行循環(huán)移位或旋轉(zhuǎn)操作。如何執(zhí)行“左轉(zhuǎn)”和“右轉(zhuǎn)”等操作?右轉(zhuǎn)兩次Initial --> 1000 0011 0100 0010應導致:Final --> 1010 0000 1101 0000舉個例子會有幫助。(編者注:許多常用的用C表示旋轉(zhuǎn)的方式,如果旋轉(zhuǎn)計數(shù)為零,或編譯成不止一個旋轉(zhuǎn)機器指令,就會有未定義的行為。這個問題的答案應該記錄最佳實踐。)
3 回答

DIEA
TA貢獻1820條經(jīng)驗 獲得超3個贊
template <typename INT> INT rol(INT val) { return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));}
template <typename INT> constexpr INT rol(INT val) { static_assert(std::is_unsigned<INT>::value, "Rotate Left only makes sense for unsigned types"); return (val << 1) | (val >> (sizeof(INT)*CHAR_BIT-1));}
- 3 回答
- 0 關(guān)注
- 864 瀏覽
添加回答
舉報
0/150
提交
取消