神奇的位運算 進製轉換問題 16轉8

2021-08-21 18:23:51 字數 1136 閱讀 7343

說道位運算子,應該都了解,但是很少有人會用,在網上看別人的**,我至今只見過一道題用到了位運算子,並被它深深的搞暈了(當然,他搞暈我是要負責的,我現在已經深深的迷上了他,真的是太神奇了),位運算子的原理容易懂,也都知道他運算的效率很高,但是他究竟怎麼去用,用在什麼地方,我想不少人都說不清楚,所以當我看到位運算子可以這麼玩的時候,我感到很神奇!

首先,我們先來乙個簡單的程式來說明位運算子的神奇。

問題是:如何交換兩個變數的值? 看到這個問題,我想九成的人會說定義第三方變數,通過第三方變數去交換值。

對,這是個很直觀很容易想到的方式。但是我還知道兩種不用第三方變數的方法,並且其中有一種方法最安全,最高效——利用位運算子(^)交換,簡單,易記。(首先需要給大家乙個公式,這個公式是實現這個方法的核心:a ^ b ^ b = a)

void exchange(int a, int b)

看到這裡,是不是十分不可思議?其實這很好理解,只要你知道(^)這個符號是怎麼運算的,用筆寫寫畫畫就出來了……這裡就不解釋了,有興趣的人去試試就成了。

通過這個小演算法,我想大家的興趣就已經被吸引住了,那麼我們就來嚐嚐我們的硬菜吧!

題:給定n個十六進製制正整數,輸出對應的八進位制數。 題好理解,通常這樣的問題,我們都先將其轉換為2進製,再轉成8進製的好,廢話少說,**如下。

#include #include char str[100005], num;

void fun(int i, int state)

return;

}if(state != 3)

else

}int main()

return 0;

}

看到**,我變成了乙個大寫的懵比,然後我決定跟它死磕到底,我拿出自己的法寶,筆和紙,自己一步一步模擬執行並嘗試去理解每一步**的意圖(有的時候,編輯器的斷點分步功能還沒有我們的紙和筆用這方便快捷,我們可以前後對比著去發現**中的一些奧妙)。 演算法,我認為是不能細細的講的,只能提供乙個大致的思路,具體的過程需要自己去悟,因為只聽那是容易變成懵比的,所以,我只能推薦你們去帶入乙個值去嘗試著一步一步的往後推!這樣有利於我們對**的理解,大致的思路和方向我已經在**中注釋了,希望可以幫助大家去好好理解!

感覺博主寫的很棒,默默的轉了 原帖:

洛谷P1100 位運算 進製轉換解釋

ac 如下 include include using namespace std intmain 你沒有看錯,就是這麼簡單,就是這麼酸爽,上個月寫的70行 記憶猶新 先聊聊二進位制吧 總所周知,計算機的記錄方式是二進位制記錄,即計算機的世界是0和1的世界。但我們現實生活卻屬於十進位制的世界,那麼如...

力扣日記 405 數字轉16進製制 位運算

給定乙個整數,編寫乙個演算法將這個數轉換為十六進製制數。對於負整數,我們通常使用補碼運算方法。注意 十六進製制中所有字母 a f 都必須是小寫。十六進製制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元 0 來表示 對於其他情況,十六進製制字串中的第乙個字元將不會是0字元。給定的數確保...

Python進製之間的轉換和位運算整理

簡單整理下位運算的用法 value ff1a shi int value,16 16進製制轉10進製 第乙個引數value是要轉換的值,第二個引數是原資料的進製 print s的十進位制為 value,shi er bin shi 2 bin 十進位制轉換2進製 print d的二進位制為 shi,...