2013-10-09 30 views
-1

「這個位被設置」甚至意味着什麼以及如何確定哪些位被設置,哪些不是。如何確定設置了哪個位?

例如: 如果我有二進制0001 0010 =十進制18 我怎麼知道位1和4被設置?

澄清:在我的頭上,並沒有編碼

+0

可以以2的相應功率進行位與操作。 –

回答

0

你的「在我的腦海中,沒有編碼「的澄清,this answer 總結得很好。目前還不清楚是否想知道從二進制數或十進制數中設置哪些位,我將假設後者,因爲看看是否從二進制數設置了一個位是微不足道的。我幾件事情添加到鮑里斯的答案:

  • 一個數目B的位K設置,如果它的值是1,這意味着你需要的2 K個功率添加到您的總和,以得到B.請記住,在二進制表示法中,每個正整數表示爲2的冪的和。沒有2的冪可以表示爲2的較小冪的和,從而使得二進制表示形式是唯一的。

  • 您可以立即知道是否設置了第一位,因爲它定義了奇偶校驗(0-even,1-odd)。

  • 您可以通過查找小於您正在分析的數量的2的最大冪來了解最大的設置位。沒有超過這個數字的位會被設置(如果它們是,那麼它們會比你找到的2的冪更大,從而消除它的最大值)。

  • 從這裏開始,你基本上就像鮑里斯告訴你的那樣。這是一個線性檢查兩個的每個權力。

我想你可能想了解一下this以更好地理解你所要求的。

0

我正在使用基於減法數字的方法。

你知道2的冪:

2^0 = 1 
2^1 = 2 
2^2 = 4 
2^3 = 8 
2^4 = 16 
2^5 = 32 
2^6 = 64 
2^7 = 128 

然後把你想要的任何號碼,並嘗試從2的冪的。減去最大,但結果必須大於或等於0。

例子:

  1. 取數字18。
  2. 嘗試減法128:18-128 = -110,這意味着你不能減去128,第7位是0
  3. 嘗試減法64:18-64 = -46,這意味着你不能減法64,第6位爲0
  4. 嘗試減法32:18-32 = -14,這意味着你不能減去32,第5位是0
  5. 嘗試減法16:18-16 = 2,這意味着你CAN 16。減去,這4個比特是1
  6. 繼續與其餘:二月18日至16日
  7. 嘗試。減去8:2-8 = -6,這意味着你卡恩」 t減去8位,即3位是0
  8. 嘗試減法4:2-4 = -2,這意味着你不能減去4,第2位是0
  9. 嘗試減法2:2-2 = 0,這意味着你可以使用CAN。減去2,1-ST位是1
  10. 數的其餘部分是0,則每以下的位是0