我想知道是否有一个计算允许我获得我需要存储任何负(有符号)值(如-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位Unsigned位整数的取值可以为:0 - 65535
一个有符号整数可以有以下值:−32,768 to 32,767
在两种编码下,数字0 - 32,767
的存储方式相同。处理方式无差异。
然而,数字32,768 - 0
是使用一个称为two's恭维的系统存储的。
位明智,数字-1
和32,768
是相同的。-2
和32,767
是一样的
因此,计算一个负整数所需的位数最简单的方法是将其转换为有符号的等价物。