二進制基礎

了解

  1. 十進制和二進制的由來
  • 進制轉換
  • 位運算
  • JDK內置的進制轉換
  • Java中的進制

十進制和二進制的又來

十進制可以說是中國的一大發明,早在商代初期的甲骨文中,就發現了用于計數的數字。

甲骨文.png

除了十進制外,日常生活中還有計算機所用的16進制,古埃及所用的60進制,雅瑪人用的20進制,測量角度所用的360進制等等方便運算的計數系統。
計算機采用的是二進制,在中國神秘的周易中的伏羲八卦圖發現了二進制。

伏羲八卦圖.png

西方認定二進制是萊布尼茨,G.W.發明的

萊布尼茨

進制轉換##

了解

  1. 什么是二進制?
  • 二進制怎么表示一個數?
  • 計算機為什么要使用二進制?
二進制的相關概念(1)
二進制的相關概念(2)
二進制轉十進制(3).png
十進制轉二進制
適合計算機的進制
常用進制轉換

二進制位運算##

位運算說白了就是對二進制位執行的位操作,在特定情況下,計算方便,速度快,被支持面廣。如果用算數方法,速度慢,邏輯復雜,在單片機的情況下,有的復雜指令不一定支持。


二進制位運算

1、按位與 &

兩位全為1,結果才為1
范例

0&0=0;     0&1=0;    1&0=1;    1&1=1;

51&5  即 0011 0011 & 0000 0101 = 0000 0001    因此51&5=1;

位運算的特殊用法:
(1)清零。如果想將一個單元清零,即使其全部二進制位為0,只要與一個各位都為零的數值相與,結果為零。
(2)取一個數中指定位
范例

設:X=10101110,取X的低4位,用X&0000 1111 = 0000 1110 即可得到

方法:找一個數,對應X要取得位,該數的對應位為1,其余為零,此數與X進進“與運算”可以得到X中的指定位。

2、按位或 |

只要有一個為1,結果就為1
范例

0|0=0;    0|1=1;    1|0=1;    1|1=1;
51 | 5 即 0011 0011 | 0000 0101 = 0011 0111 因此51 | 5 =55;

或運算的特殊用法:
常用來對一個數據的某些位置1
范例

將X = 10100000的低4位置1,用X | 0000 1111 = 1010 1111即可得到

方法:找到一個數,對應X要置1的位,該數的對應位為1,其余位為零,此數與X相或可使X中的某些位置1。

3、異或運算 ^

兩個相應位為“異”(值不同),則該位結果位1,否則為0
范例

0^0=0;    0^1=1;    1^0=1;    1^1=0;
51^5 即 0011 0011 ^ 000 0101 = 0011 0110 因此 53 ^ 5 =54;

異或運算的特殊用途
(1)使特定位反轉。找一個數,對應X要反轉的各位,該數的對應位為1,其余位為零,此數與X對應位異或即可。
范例

X=10101110,使X低4位反轉,用X……0000 1111 = 1010 000即可得到

(2)與0相異或,保留原值
范例

X^0000 0000 = 1010 1110

兩個變量交換值的方法

  1. 借助第三個變量來實現。
    C=A; A=B; B=C;
  2. 利用佳佳辦法實現兩個變量的交換
    A=A+B; B=A-B; A=A-B;
  3. 用位異或運算來實現,也是效率最高
    原理:利用一個數異或本身等于0和異或運算符交換律。
    A=A^B; B=A^B; A=A^B;

4、取反運算 ~

對一個二進制數按位取反,即將0變1,1變0

5、左運算 <<

將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)
范例

2 << 1 =4

若左移時舍棄的高位不包含1,則每左移一位,相當于該數乘以2。
范例

-14 (即二進制的11110010 )<< 2 = 11001000

6、右移運算 >>

將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。操作數的每右移一位,相當于該數除以2。
左補0 or 補1得看被移數時正還是負。
范例

1 = 4 >> 2
-14 (11110010) >> 2 = -4 (11111100)

7、無符號右移運算 >>>

各個位向右移指定為位數。右移后左邊空出的位用零來填充。移出右邊的位被丟棄。
范例

-14 >>> 2

負數以其正值的補碼形式表示

原碼
一個整數按照絕對值大小轉換成的二進制數稱為原碼。
例如:00000000 00000000 00000000 00001110是14的原碼
反碼
將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼
例如:00000000 00000000 00000000 00001110每一位取反,得11111111 11111111 11111111 11110001
補碼
反碼加1稱為補碼
11111111 11111111 11111111 11110001 +1 = 11111111 11111111 11111111 111110010

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1、 十進制和二進制的由來 2、 進制轉換 什么是二進制十進制轉二進制采用短除2法二進制怎么表示一個數計算機為什么...
    夏沫xx閱讀 713評論 0 1
  • 1 關鍵字 1.1 關鍵字的概述 Java的關鍵字對java的編譯器有特殊的意義,他們用來表示一種數據類型,或...
    哈哈哎呦喂閱讀 673評論 0 0
  • 1、概念簡介 子網掩碼子網掩碼又叫網絡掩碼、地址掩碼,是一個32位地址,用于屏蔽IP地址的一部分以區別網絡號和主機...
    黒貓閱讀 7,732評論 0 23
  • 我希望能在一個未完的長篇里 恍惚入睡 爐火暖熱了通紅臉龐 故事里的小孩們路過夕陽 大人們小時候,都討厭表達 像毛茸...
    烏鴉之白閱讀 482評論 6 4
  • 【內楗第三】 (3.6)原文:治名入產業,曰楗而內合。上暗不治,下亂不寤,楗而反之。內自得而外不留,說而飛之。若命...
    西河堂閱讀 487評論 0 0