Javascript 如何计算表示任何负值需要多少位?

Javascript 如何计算表示任何负值需要多少位?,javascript,c++,binary,decimal,signed,Javascript,C++,Binary,Decimal,Signed,我想知道是否有一个计算允许我获得存储任何负(有符号)值(如-1、-255、-1324等)所需的位数 目前,我已经实现了一个函数来计算大于等于0的值: calculateBitsNeeded = function (value) { if (value == 0) { return 1; } else if (value > 0) { return Math.floor(Math.log(value) / Math.LN2) +

我想知道是否有一个计算允许我获得存储任何负(有符号)值(如-1、-255、-1324等)所需的位数

目前,我已经实现了一个函数来计算大于等于0的值:

calculateBitsNeeded = function (value) {

    if (value == 0) {

        return 1;
    }
    else if (value > 0) {

        return Math.floor(Math.log(value) / Math.LN2) + 1;
    }
    else {

        //TODO ...
    }
};
例如:如果我有数字-38,我需要7比特来存储(101 1010)


感谢您的帮助:)

假设您谈论的是整数

要回答您的问题,您必须了解,在所有现代平台上,整数要么被认为是有符号的,要么是无符号的

JavaScript实际上不支持整数,它们存储为浮点值。然而,64位浮点数可以完全准确地处理53位整数,因此它可以轻松地处理C使用的16位整数

我将忽略这些,并将我的答案限制为16位整数,您将使用这些整数与C进行对话

16位无符号整数的值可以为:
0-65535

有符号整数的值可以是:
−32768到32767

在这两种编码下,数字
0-32767
的存储方式相同。处理上没有区别

但是,数字
32768-0
是使用名为的系统存储的

位方面,数字
-1
32768
是相同的<代码>-2和
32767
是相同的


因此,计算负整数所需位的最简单方法是将其转换为有符号等效项

JS中以64位格式存储的任何数字。@hindmost:是的,我知道。但是我正在编写一个应用程序,它与一个非常低的底层的C++服务器通信。所以事实上,我必须处理ArrayBuffers等问题。还要照顾好我的零碎东西;)所以你的问题与Javascript无关。用
C++
来标记它好吧,这个问题与任何编程语言都没有特别的关系,它指的是it和软件。我的应用程序是用JavaScript构建的,但不管怎样,我已经用C++标记了它……它只支持53个整数?你是说所有53位整数?53位。谢谢你接电话。