做為程式設計師經常會涉及到各種進製之間互相轉化的問題,下面我就以我們常見的二進位制,八進位制,十進位制,十六進製制的互相轉化的問題做一簡單的**:
二進位制的表現形式:二進位制是計算機能夠識別的語言,任何資料都要在計算機底層轉化成二進位制,計算機才可以進行簡單或者複雜的任何運算。所以二進位制是計算機的最基本語言。二進位制的變現形式是以:1或
0的形式進行排列的。如:
0001-0101-0010-1001
十進位制是我們生中常見的一種的計數方式,幾乎各行各業堵在用十進位制進行簡單或者複雜的運算。但是無論是什麼進製的數在計算機進行運算的時候都會先轉換成二進位制的數以後,計算機才會去進行計算。所以我們必須知道各個進製之間是怎麼轉化的?下面我們就隨便寫先寫乙個二進位制的數,把這個二進位制的數轉化成十進位制,八進位制,十六進製制。
隨機給定乙個二進位制的數:0100101
轉化成十進位制的數(看圖):
上面的二進位制數是:0100101,那麼我們把他的每一位對應到相應的格仔中,從右向左依次對應。1對
1,0對
2,1對
4,0對8,
0對16
1對32
,一直一一向對到二進位制的最高位沒有
1為止,所以第7位的
0可以不用管了。
下面就來計算一下(看圖):
上面就是二進位制轉化成十進位制的演算法。好我們就以這個37十進位制的數來推算出
37他自身的八進位制數和十六進製制的數看一下怎麼去轉化?
下面就是37這個十進位制數轉八進位制數的演算法(如圖):
同樣的,我們把這個十進位制數37轉化成
16進製制的數,在這個地方一定要明確,二進位制數是滿2進
1,八進位制是滿8進
1,十進位制數是滿10進
1,十六進製制數是滿16進
1,同時還要注意:十六進製制數在滿
10以後就不能用數字來表示了,因為沒有相應的數字來和它對應了,所以我們在這裡找到了一種可以解決這種問題的辦法,就是以英文本母來代替a、
b、c、
d、e、
f分別對應10、
11、12、
13、14、
15到十六以後就要進一位了所以不必再寫。
下面我們就來看一下把乙個十進位制37怎麼轉化成乙個
16進製制的數呢?如圖:
以上我們就完成了乙個二進位制的數轉化成十進位制的數,再將這個十進
的數轉化成了八進位制和十六進製制的數。我們從上面可以看出來二進位制
轉化成八進位制或是十六進製制都是以十進位制的數為橋梁進行轉化的,也就
是說我們十進位制的數是乙個中間的紐帶。
那麼我們如果碰到了乙個十六進製制的數或者八進位制的數那麼實現各個進製之間的互相轉化呢?首先我們要明確乙個核心的思想我們各個進製之間的互相轉化都是以十進位制為中間的紐帶,所以我們在這裡的紐帶依然沒有變還是以十進位制為中間的橋梁。
進製之間轉化的核心思想是:十進位制為轉化兩個不同進製的中間橋梁。
下面我們就隨機寫了幾組資料,碰上二進位制的數,我們要將其轉化為:十進位制,八進位制,十六進製制;碰上八進位制的數我們要將其轉化為:二進位制,十進位制,十六進製制的;碰上八進位制的數我們將其轉化為:二進位制,十進位制和十六進製制的;最後我們碰上十六進製制的數將其轉化為:二進位制,十進位制和八進位制的數。
其他進製與十進位制互相轉化如何計算
首先說個很好記的一句話 幾進製,滿幾進一 比如二進位制如何 表示3 十進位制 0 1 2 3 二進位制 0 1 10 11那在看看別的進製 十進位制 6 7 8 9 八進位制 6 7 10 11十進位制 8 9 10 11 15 16 17 十六進製制 8 9 a b f 10 11這是當數值比較小...
PHP演算法 十進位制二進位制互相轉化(含小數)
1 二進位制轉換十進位制 原理 小數點前或者整數要從右到左用二進位制的每個數去乘以2的相應次方並遞增,小數點後則是從左往右乘以二的相應負次方並遞減。例 10101.1011 1 20 0 21 1 22 0 23 1 24.1 2 1 0 2 2 1 2 3 1 2 4 1 0 4 0 16 0.5...
十進位制小數部分轉化為2進製 為什麼相乘??
10進製 2進製 整數部分 重複相除2的 小數部分 重複相乘2的 為什麼不一樣?查了好久才發現原來本質上是一樣的 假設乙個十進位制數 b 其對應的二進位制數為 b a20 b21 c22 d2 這個時候我們將10進製轉為2進製的時候實際上就是求abcd的值 那麼此時當用b除2的時候 相當對a20 b...