2016-08-05 46 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 :) –

相关问题