一、左移運算
左移運算符是”<<",表示把一個數的二進制碼全部左移若干位,由高位填充0。
int a = 3; // a的二進制碼為00000011 int b = a << 2; // b的二進制碼為00001100,即12
左移實現了將一個數乘以2的n次方,可以快速地進行二進制數的運算。
二、右移運算
右移運算符是”>>”,表示把一個數的二進制碼全部右移若干位,低位填充0或1。
int a = 12; // a的二進制碼為00001100 int b = a >> 2; // b的二進制碼為00000011,即3
對於正數,右移實現了將一個數除以2的n次方,相當於向下取整;對於負數,則是向上取整。
三、無符號右移運算
無符號右移運算符是”>>>”,表示將一個數的二進制碼全部右移若干位,高位填充0。
int a = -12; // a的二進制碼為11110011 int b = a >>> 2; // b的二進制碼為00111100,即60
無符號右移只能用於無符號數,對於有符號數則和右移一樣,符號位也會參與運算。
四、應用舉例
移位運算廣泛應用於各種算法中,下面以一段加密解密代碼為例。
unsigned int key = 12345; // 加密函數 unsigned int encrypt(unsigned int data) { return (data <> 2; } int main() { unsigned int data = 12345678; unsigned int encrypted_data = encrypt(data); unsigned int decrypted_data = decrypt(encrypted_data); printf("原始數據:%u\n加密後:%u\n解密後:%u\n", data, encrypted_data, decrypted_data); return 0; }
在這段代碼中,使用左移運算將原始數據乘以2的2次方,再與密鑰進行異或操作得到加密後的數據;使用右移運算將加密後的數據右移2位,再與密鑰進行異或操作得到解密後的數據,最終能夠還原原始數據。
五、總結
移位運算是一種高效的二進制位運算,能夠快速處理二進制數的乘除運算、加密解密等問題。合理使用移位運算可以使代碼更加高效,提升算法效率。
原創文章,作者:JQMCC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/351633.html