例如,我如何从0x01获得8,或从0x0001获得16。
我想知道变量的位数。
var someNumber = 0x123456;
var len = whatToDoHere(someNumber);
console.log(len); // => 24 for example
答案 0 :(得分:1)
以下是一些替代方案:
f1 = n => (Math.log2(n) & -8) + 8 // log2 (-Infinity & -8 = 0)
f2 = n => ((n >>= 8) && f2(n)) + 8 // recursion
f3 = n => n.toString(16).length + 1 << 2 & -8 // string length
for (n of [0, 0xff, 0x100, 0xffff, 0x10000, 0xffffff])
console.log( f1(n) + '\t' + f2(n) + '\t' + f3(n) + '\t0x' + n.toString(16) )
答案 1 :(得分:0)
数字只是一个数字,它没有附加任何特定的表示。即使你说它将被格式化为base16(作为十六进制)或base256(字节),也没有说明前导零的数量(如0x01
vs 0x0001
) 。但是,如果您知道,那么您已经知道格式化数字的位数。
答案 2 :(得分:0)
另一种可能的解决方案是转换为十六进制字符串,然后测量字符串的长度:
const someNumber = 0x123456;
const hexString = someNumber.toString( 16 );
const numberOfBits = hexString.length * 4; //each character is half a byte
console.log( "Number of bits: ", numberOfBits );