標籤:網線 意思 進階語言 系統 模式 hex 電信 strong 資料連結層
---恢複內容開始---
進位
在一般生活中,我們一直在應用的十進位,就是逢十進一,而今天我們要接觸的是,電腦編程常用的進位!首先我們要知道,電腦內部運算採用的是二進位,也就是逢二進位!
1.什麼是二進位?
就是只有0 和 1 每當遇到值為2 就向前進一位。
2.為什麼電腦內部是二進位?
這就要從硬體說起,電腦是如何儲存資料的,要知道我們網路傳輸,就是你要和別人一起聊天,你們隔著很遠,到底是怎樣才能讓他收到你的聊天內容? 有一根網線還能說過去,畢竟網線連結終端我們也不知道連到哪,保不齊就是全世界都是用網線連結。但是無線時候為什麼還是可以聊天內容又是怎麼算的?
附:我們網路傳輸主要是更具我們電腦從應用程式層到物理層硬體裝置,物理層將資料連結層資料幀轉換為傳輸介質相應的訊號形式,如光訊號、電磁波訊號等然後由路由器通訊,只要不是同一個網路,我們傳輸都要依靠路由。在這樣說就扯遠了,簡單地說,我們電腦為什麼要用二進位,到底和上面的有什麼關係?正是因為我們用的的是電和光傳播資料,那麼在硬體裝置要識別這些電和光傳輸的是什麼是很麻煩的,比如給他弄個什麼形狀是代表什麼,這太複雜而且傳輸太不穩定一開始就被淘汰這種想法,到後來那些大神們就規定 波長呈升型表示1 波長呈降型就表示0 平行表示不變,因為就只有這兩種形態,所以使用二進位最合適,所以電腦內部是二進位!
注意:在我們JAVA教程一般講的是我們電腦傳輸電訊號開就是1 關就是0這是一種形象的說法。畢竟我們瞭解二進位而他具體是怎麼實現計數的沒多大必須性。
那麼就來簡單類比一下JAVA教程最常讓我們理解的一種方式
看圖片 ,通電狀態標識1 不同電錶示0.
綜上所述,你只要簡單明白:這是由電腦的工作原理決定的,電腦進行運算實際是靠的電路,電路的邏輯只有0和1兩個狀態,這裡的0和1並不是數位0和1,0和1是表示兩種不同的狀態,0表示低電平,1表示高電平。因為電腦是由無數個邏輯電路組成的,只能根據0和1的無限位元和組合來表達資訊。所以二進位是最接近電腦工作模式的,也是電腦直接能讀懂的,其他進階語言都需要轉義成機器語言。
我們要學習的不是電腦怎麼去採集電訊號和光訊號,而是知道電腦常用的進位:1.十進位 2.二進位 3.八進位 4十六進位
1.十進位逢十進一位 也就是 1 2 3 4 5 6 7 8 9 到了十 怎麼表示的 就是10 他就進了以為
2.二進位逢二進一位 也就是 0 1 到了2的時候 他也僅為 10 在二進位這個表示2不是10哦
3.八進位逢八進一位 也就是 0 1 2 3 4 5 6 7 到了8的時候,他就進一位 10 表示 十進位的8
4.十六進位逢十六進位 也就是 0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15) 6不6 數字不夠,字母湊。
知道這些進位有什麼用,不知道你有沒有這個疑問?為什麼要學習它?
目前在我們後面要學會資料類型和位元運算都是需要進位的知識,具體是進位哪方面的知識呢?就是即將要講的 進位轉換!
進位轉換:就是這些進位之間的互相轉化,電腦內部計算是二進位,那麼到底我們開啟系統的電腦,他是什麼原理,讓我們可以進行十進位運算?是怎麼做到的,這個是今天的主要針對內容!
看不懂八進位和十六進位沒關係,先嘗試去理解意思,其他具體數字轉換得值可以忽略,等看了十進位轉二進位再回頭來看一遍!
首先我們要知道的是八進位:
八進位的特點是逢八進一位。那麼來看下面這一段位元:0111 開啟電腦,選擇程式員類型。(不會選自己百度)
BIN:二進位 HEX:十六進位 OCT:八進位 DEC:十進位!
沒錯這個數字表示7。
在哪我們在看一個位元:1000
注意看:OCT寫的是不是 10 是不是向前進了一位?
所以八進位我們用二進位一般這樣去轉換 三個二進位位表示八進位的一位!
十六進位同理,我就不用電腦了,直接給你寫出來
二進位轉十六進位:
因為二進位1111 表是的就是15 而十六進位是16進一,所以二進位轉十六進位是 四個二進位位表示十六進位一位。
那麼明白了這點,我們來做幾個練習題:
00010001 計算出他的十六進位和八進位
二進位: 000010001
八進位: 000 010 001
最終答案:0 2 1 所以是:21
臥槽,怎麼搞的這個數難道是21 我怎麼用電腦計算出的21並不是這個答案,於是開始慌了!
這是一個用對進位不熟悉造成的,注意我們求得是二進位對八進位,我們別看DEC這個是十進位。如果你和我一樣是WIN10首先要去點擊OCT然後在看BIN是多少
沒毛病吧! 然後我們通過這個轉換還明白了一個點記住:進位不會我們就用電腦轉唄,反正又不是常用,演算法能記就記,記不住我們就用電腦,實在想找演算法就百度唄!
好了八進位是沒毛病了,我們再看十六進位例子:
BIN:00010001
HEX:0001 0001
轉換:11
明吧了吧,就是把二進位轉分割然後分別計算出他們的值,這樣能達到快速轉換!
十進位轉二進位:
看了上面的轉換估計有一個疑問 0001你怎麼就知道是1 ? 這不亂講麼,我都不知道為什麼0001是 1額。別急,學了十進位轉二進位,不管多少進位你瞬間就能明白了!
首先學十進位轉二進位 我們用最原始的運算式來學習:十進位轉二進位就是一直用十進位除以2,出盡後最後是1則最後一位是1 如果出盡最後一位則是0,從下往上排列!注意這個原始演算法對於十六進位和八進位都是通用的,最主要的是八進位和十六進位,要分割 比如十六進位 2F 兩位元,要知道一位十六進位表示的是 0000 四個個二進位位 所以 分別用來除以2 然後按照位置前後組合得到的0和1 八進位也是同理,八進位是三個位,就這裡和十六進位不同,按三個位分!
例:我們現在要將10轉換為2進位
解析:就是一直除以2 在第一次10/2=5 沒有餘數,所以此位置就是0 然後在得的數5 再除以2 5/2=2%1 所以此位置是1 得到2,此時2/2=1 所以最終答案:1010
此時我們在做兩個例子
將十進位25轉換成位元: 2 | 25 1 ------ 2 | 12 0 ------ 2 | 6 0 ---- 2 | 3 1 ------ 1 從下往上排列就是位元:11001
那麼學了十進位,那麼十進位轉二進位怎麼算呢?整數二進位用數值乘以2的冪次依次相加,小數二進位用數值乘以2的負冪次然後依次相加!
舉個例子: 0101 轉 十進位
這就是進位轉換,如果你是新手,來看我資料,估計我這個資料有點針對我個人寫的,那麼我給你找幾個文章學習進位轉換:
http://jingyan.baidu.com/article/495ba84109665338b30ede98.html
http://www.cnblogs.com/syqlp/p/6586995.html
http://blog.csdn.net/xy2204/article/details/50522075
二進位快速轉十進位方法:
以8位 來示範:
1.第一種:
00000001 1
00000010 2
00000100 4
00001000 8
00010000 16
00100000 32
01000000 64
10000000 128
2.第二種:
00000001 1
00000011 3
00000111 7
00001111 15
00011111 31
00111111 63
01111111 127
3.第三種:
10000000 128
11000000 192
11100000 224
11110000 240
11111000 248
11111100 252
11111110 254
舉個例子: 11101011
可分為:
11100000(上面第三種類型) 224
00001000(上面第一種類型) 8
00000011(上面第二種類型) 3
我們通過記住上面三種類型的轉換,再用加 法(加法口算你會吧)立即得到結果:235
==================================================================================
方法二:
熟記以下排列,其實很Easy了,從右往 左,依次是前一個數的2倍:
256 128 64 32 16 8 4 2 1
隨便寫個數字比如48
48 = 32 + 16,所以在32 和 16所在的位置為1,其餘為0,
轉為2進位就是
256 128 64 32 16 8 4 2 1
0 0 0 1 1 0 0 0 0
二進位轉十進位就更簡單了,
比如隨便寫的一串 01111101
先寫上 : 0 1 1 1 1 1 0 1
然後填充 128 64 32 16 8 4 2 1
十進位為 64+32+16+8+4+1=125
看不懂只能自己去看視頻,這邊聽邊講的好學會,用文字這個樣給你說,你本來沒點基礎,我是沒法讓你看懂的!
---恢複內容結束---
Java基礎筆記(3) 進位與進位轉換