對於二進位制我相信大部分讀者剛開始接觸一定是一臉蒙蔽,當初我也是,但是通過長時間的刷題,二進位制各種各樣的操作都有了一些接觸,我通過將每次刷題中有關於二進位制的操作全都總結起來,今天在學樹狀陣列時發現總結的還是有一點了,於是打算分享一下,畢竟這個神奇的二進位制還是挺讓人頭疼的。
c/c++我知道的部分常用的位運算主要如下幾個:
a<<1左移運算,二進位制的11(十進位制為3),操作後為110(十進位制為6),相當於十進位制乘2
a<<2相當於十進位制乘以4
x=1x<<1等於x*2(線段樹可以運用到)
x<<1|1等於x*2+1(線段樹中可以運用)
a>>1右移運算,二進位制的111和110,操作後都為11,相當於除2
>> 右移運算相當於整數除法10>>2 = 10 / 4 = 2
a&b與運算,二進位制的100與上110,操作後為100,也就是按位與
1 1=1
1 0=0
0 1=0
0 0=0
& 按位與運算 兩個位都為1時,結果才為1
a|b或運算,二進位制的100或上110,操作後為110,也就是按位或
1 1 =1
0 1=1
1 0 =1
0 0 =0
| 按位或運算 兩個位都為0時,結果才為0
a^b異或運算,二進位制的100異或110,操作後為010,也就是按位異或
1 1=0
0 1=1
1 0=1
0 0=0
^ 按位異或運算 兩個位相同為0,相異為1
奇數異或1,為奇數減1,
偶數異或1,為偶數減1
~ 按位取反運算 0變1,1變0
其實這些操作網上大部分都可以搜尋到,只是大多數都是太零散了。
二進位制操作
關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
二進位制檔案操作
無關資料區 jpg資料區 無關資料區 jpg資料區 無關資料區 jpg資料區 現想把這些jpg資料從該檔案中讀出來,生成乙個個單獨的檔案,該如何做呢?幫你寫了個程式,測試了只含有乙個資訊的檔案 呼叫 void test fp.close 思路是,先得到ff的值,然後再判斷下一位是否是0xd8,但這裡...