數字轉化為十六進製制 按位操作(詳解)

2021-10-07 10:26:21 字數 1336 閱讀 6376

力扣習題405:數字轉化為十六進製制數 (轉化8進製,演算法類似)

這道題在力扣裡面歸屬於位運算,位運算一般來講,速度比較快,效率高。在解決本題時,個人作為初學者最先想到的是直接用除法、求余去解決,但是這樣比較的麻煩,演算法效率不高,進製轉換一般可以嘗試使用位運算來實現。題目很好理解,演算法也不難,在此,本人想寫一篇詳細解法來為大家提供便利。

首先,使用位運算最好是能對位運算的特性有了解。本題主要使用&運算。&運算最大的特點是同為1才能得1,假如我們用全1於某乙個數做運算,結果還是數的本身,且結果的位數為兩者位數最小。比如26&15,15有4位,結果為26的低四位;4&15,結果為4。如圖所言。也就是說,可以用&運算去擷取數字的低位

那假如說,要擷取一些數的高位,或者是中間位怎麼辦呢??這時,可以用》,右移符號,數字右移,正數的話補0,負數補1。這時數字通過右移就可以將高位移到低位。當然,擷取想要的數字的一些位數,還有其他位運算。

我們知道,二進位制轉十六進製制可以通過四位一轉的方式進行轉化。那麼對於本題來言,可以讓數字每次與15做&運算,獲取低4位後,再將數字右移四位,此時數字的從低往高數,5-8位變成數字的0-4位,那麼又可以擷取低四位,如此迴圈即可將數字轉化為十六進製制。這就是本題的思路。計算機內部數字位運算統一採取二進位制,**裡面的數字最終都會轉為二進位制。

class solution ;

string str = "";

if (num == 0)

for(int i = 0; i<8; i++)

int fisterzeropos = str.find_first_not_of('0');

str.erase(0,fisterzeropos);

return str;}};

num&15可得每次擷取到的低四位,然後根據得到的低四位對應得數字去map陣列裡面尋找十六進製制對應符號即可。

由於題目中提示,數字時32位有符號數,因此每次移動4位,總共需要8次,但是假如某些數達不到32位,那麼str出for迴圈後會有很多多餘得0,因此需要除去0。並且再擷取低四位時,str拼接得到的是與答案相反得,最後需要字串翻轉。

藍橋杯十六進製制轉化為八進位制

十六進製制轉化為八進位制 1,首先將十六進製制轉化為二進位制,再將二進位制轉化為八進位制 2,將十六進製制轉化為二進位製用了switch語句的 蒟蒻 方法來寫的 3,將二進位制轉化為八進位制,三位三位的進行轉化 如二進位制001轉化為八進位制 0 4 0 2 1 1 1 include 2 incl...

java陣列操作4 十進位制轉化為十六進製制

陣列的操作 十進位制轉化為十六進製制 右移有兩種 右移運算子 有符號 用來將乙個數的各二進位制位全部右移若干位.例如 a a 2,使a的各二進位制位右移兩位,移到右端的低位被捨棄,最高位則移入原來高位的值.如 a 00110111,則a 2 00001101,b 11010011,則b 2 1111...

byte型別資料轉化為十六進製制2

1 反碼 乙個數如果是正,則它的反碼與原碼相同 乙個數如果是負,則符號位為1,其餘各位是對原碼取反 2 補碼 利用溢位,我們可以將減法變成加法 對於十進位制數,從9得到5可用減法 9 4 5 因為4 6 10,我們可以將6作為4的補數 改寫為加法 9 6 15 去掉高位1,也就是減10 得到5.對於...