猿问

是否有计算或估计二进制整数位数的公式?

例如:基数 10(999) => 3 位数字 === 基数 2(1111100111) => 10 位数字


我目前正在使用一个表来进行这个估计,但它仍然限制在 base10 中的 15 位数字,因为在 JS 下我们仍然被 MAX_SAFE_INTEGER 阻止是下表(运行代码段查看它)。


如何通过公式扩展此表,直到基数为 10 的 255 位数字?


const TDigits   = document.querySelector('#T-Digits tbody')

,     MaxDigits = Number.MAX_SAFE_INTEGER.toString().length

;


var x9 = '9';


for (let n=1; n < MaxDigits; n++)

{

  let newRow = TDigits.insertRow(-1)


  newRow.insertCell(0).textContent = n

  newRow.insertCell(1).textContent = (x9-0).toString(2).length


  newRow.insertCell(2).textContent = Math.ceil(Math.log2(Math.pow(10,n)))

  

  x9 += '9';

}

table { margin:1em}

table thead { background-color: cadetblue }

table td { text-align: center; padding: .2em .5em; border-bottom: 1px solid grey }

<table id="T-Digits">

  <caption>Max digits corresponding</caption>

  <thead>

    <tr><td>base 10</td> <td>base 2</td><td> log </td></tr>

  </thead>

  <tbody>

      <tr><td>0</td> <td>1</td><td>1</td></tr>

  </tbody>

</table>


四季花海
浏览 149回答 2
2回答

慕盖茨4494581

for (n = 1; n < 256; n +=1 ) {&nbsp; &nbsp; console.log(n, Math.ceil(Math.log2(Math.pow(10,n))));}据我所知,这些值匹配

一只名叫tom的猫

&nbsp;⌊log2(n)⌋ + 1var n = 123;console.log(n, (n >>> 0).toString(2) );var nb = Math.floor( Math.log2(n) ) + 1;console.log( nb );
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答