Excel實現有符號十進制數轉二進制數

  最近需要用到將Excel中範圍爲-1023~+1023的數據轉換爲二進制,其實這個問題完全可以通過Matlab編程來解決,但是呢,得到的結果要重新複製進Excel表格中,也沒有那麼方便,所以想直接用Excel中的公式來進行十進制轉二進制操作。
  Excel中自帶十進制轉二進制的函數,DEC2BIN,就是這個函數,我們來看一下這個函數的用法,這個函數有兩個參數,number[places],這裏的[places]指的是要使用的字符數,什麼意思呢,我們先來看一個簡單的例子。
  =DEC2BIN(2)
  =DEC2BIN(2,3)
  =DEC2BIN(2,0)
  我們先看第一個式子,這個式子的計算結果是11,答案很顯然。那我現在把式子換成下面那個呢,結果會變成什麼呢。第二個式子的結果是011,也就是[places]的意思是最後生成的字符串長度,那假如說,我們現在有第三個式子,這個式子的結果是什麼呢。編程直覺告訴我,答案應該跟一式一樣,不過很遺憾的是我錯了,顯示的結果是#NUM!。意思很明確,就是說如果實際長度超過[places],那麼就會返回錯誤。
  看完[places]這個參數,我們再來看一下number這個參數。這個參數的範圍是-512~511。但是我現在想要處理的數據範圍是-1023~1023,那怎麼弄呢。先不管負數那部分,我先只考慮正數這部分。一個大於511的正數要如何轉化爲二進制呢。後來想了一下,把這個數分爲兩部分,我們設這個正數爲A吧。一部分爲A除以512得到的整數結果,另一部分是A除以512得到的商,我們分別設這兩部分爲BC,很顯然,對於一個小於512*512A,得到的BC都是512以內的,那麼我們對BC分別進行十進制轉二進制運算就可以得到正確結果了。
  那麼如何去考慮負數呢,我們考慮一下正負數的二進制之間的關係。對於範圍在-1023~+1023之間的數字,其二進制可以用11位來表示,我們考慮一下-1轉換爲11位的有符號二進制數,得到的結果是11111111111。我們把最高位拋去,就是101,把這串字符串當成無符號型十進制整數,就是1023。也就是對於一個-1023~-1的負數,轉換爲11位的二進制數,其最高位爲1,後面的10位就是該值加上1024得到結果的二進制數,於是我就寫了如下代碼。
=IF(A6>=0,DEC2BIN(A6/512,2)&DEC2BIN(MOD(A6,512),9),1&DEC2BIN((A6+1024)/512,1)&DEC2BIN(MOD((A6+1024),512),9))
  這段代碼什麼意思呢,首先是一個IF語句,判斷當前位置的數是正數還是負數,如果是正數,則執行前面部分,若爲負數,則執行後面部分內容。在正數情況下,將該數值分爲兩部分,將除以512得到的商轉換爲一個2位的二進制數值,可想而知,因爲該數小於1024,所以這個二進制數的第一位肯定爲0。將除以512得到的餘數轉換爲一個9位的結果。於是對於一個小於1024的正數,其二進制數就可以求取出來了。這裏有個要注意的細節在於這裏的等號,一般情況下,等於的情況兩邊都能成立,但是這裏不是,只有前邊的情況能滿足,後邊的情況不能滿是,因爲0+1024=1024,而1024必須用11位二進制進行表示。
  後半部分是負數情況下的求取,我們先把這個負數加上1023,再把得到的這個正數轉換爲11位的二進制數,轉換方法跟前面的一致,然後再在前面添一個符號位1,構成了一個1位的有符號型二進制數。
  442 => 00110111010
  -63 => 11111000001
  看一下計算結果,結果顯示計算是正確的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章