2016-08-05 63 views
1

如何編寫打印出整數位的程序。 我試圖做這樣的事情:如何寫一個程序打印整數的位在JS中

function countBits(octet) 
    { 
     var  i; 
     var  c = ""; 
     var k = ""; 
     i = 128; 

     while (i > 0) 
     { 
      c = ""; 
      if (octet < i) 
      { 
       c = '0'; 
       i = i/2; 
       k += c 
      } 
      else 
      { 
       c = '1'; 
       k += c 
       octet = octet - i; 
       i = i/2; 
      } 
     } 
     return k; 
} 

但是,如果我試圖用這個程序打印位我有輸出:

Input: 123 
Output 01111011 and infinity numbers of zero 

如何刪除這個錯誤嗎?

P.S:我想這樣做只使用循環和算法這個程序,而不是功能就像(n >>> 0).toString(2);.map()或像這樣

+0

我不知道爲什麼'需要C'。你不能只是'+ ='字符串文字嗎? – 4castle

+0

是的,但對我來說更舒服:) –

+0

真的嗎?你的代碼現在非常神祕。除了octet以外,沒有一個變量是合理的。 – 4castle

回答

0

所以我添加了一點日誌記錄來檢查我的值,我得到了這個循環: 我= 64;我= 32;我= 16; ... i = 1; i = 0.5; I = 0.25

所以呀,做AgataB有關於使用其他條件,而不是因爲對JavaScript說, /2不會給你0

不像許多其他的編程語言,JavaScript不定義 不同類型的數字,喜歡整數,短,長,浮點 等

JavaScript的數字總是存儲爲雙精度浮點 點數,緊跟國際IEEE 754標準。

引自:http://www.w3schools.com/js/js_numbers.asp

+0

但現在,當我把數字大於250,我總是有輸出: '11111111' –

+0

那麼,因爲你我是128.所以不管什麼,最大總是在255,即自11111111以來,128將達到0.5。這就是爲什麼它叫做八位字節,即一個字節,最多8位。 – Luna

4

你的變量i總是大於0,所以while循環一直運行下去。當你減少它時,你將它減半。這將永遠不會達到0,但它會達到小於1的值,並且此時您想停止。

嘗試使用while (i >= 1)代替您的條件。

+0

它的工作,ty :) –

相關問題