最近,准備學數學基礎,so我覺得了解一下二進制和位運算符是很有用的。
二進制
先看看度娘怎么說
二進制是計算技術中廣泛采用的一種數制。二進制數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”,由18世紀德國數理哲學大師萊布尼茲發現。當前的計算機系統使用的基本上是二進制系統,數據在計算機中主要是以補碼的形式存儲的。計算機中的二進制則是一個非常微小的開關,用“開”來表示1,“關”來表示0。
其實就是用“1”和“0”來表示數,二進制和十進制的轉換也是挺有用的,度娘講的就挺好。
(1)二進制轉十進制
方法:“按權展開求和”
【例】:
規律:個位上的數字的次數是0,十位上的數字的次數是1,......,依次遞增,而十
分位的數字的次數是-1,百分位上數字的次數是-2,......,依次遞減。
注意:不是任何一個十進制小數都能轉換成有限位的二進制數。
(2)
十進制轉二進制
· 十進制整數轉二進制數:“除以2取余,逆序排列”(除二取
余法)
【例】:
89÷2 ……1
44÷2 ……0
22÷2 ……0
11÷2 ……1
5÷2 ……1
2÷2 ……0
1
·
十進制小數轉二進制數:“乘以2取整,順序排列”(乘2取整法)
【例】: (0.625)10= (0.101)2
0.625X2=1.25 ……1
0.25 X2=0.50 ……0
0.50 X2=1.00 ……1
位運算符
OK,接下來看一看位運算符。
位操作是程序設計中對位模式按位或二進制數的一元和二元操作。 //來自度娘
定義什么的都不重要,直接上操作
按位與運算
按位與運算符"&"是雙目運算符。 其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
1 9&5 2 00001001 //9的二進制補碼 3 & 00000101 //5的二進制補碼 4 = 00000001 //1的二進制補碼
按位或運算
按位或運算符“|”是雙目運算符。 其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
1 9|5 2 00001001 //9的二進制補碼 3 | 00000101 //5的二進制補碼 4 = 00001101
按位異或運算
按位異或運算符“^”是雙目運算符。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現。
1 9^5 2 00001001 3 ^ 00000101 4 = 00001100
求反運算
求反運算符~為單目運算符,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。
1 ~(1001) 2 = 0110
[敲黑板]重點來了,最常用的兩種位運算符
左移運算
左移運算符“<<”是雙目運算符。左移n位就是乘以2的n次方。 其功能把“<<”左邊的運算數的各二進位全部左移若干位,由“<<”右邊的數指定移動的位數,高位丟棄,低位補0。(x<<n == x*2^n)
右移運算
右移運算符“>>”是雙目運算符。右移n位就是除以2的n次方。其功能是把“>>”左邊的運算數的各二進位全部右移若干位,“>>”右邊的數指定移動的位數。(x>>n == x/2^n)
1 x<<1 //相當於x*2 2 x>>1 //相當於x/2 3 x<<2 //相當於x*4 4 x>>2 //相當於x/4 5 //…… 6 //以此類推

