我想知道是否有计算允许我获得存储任何负(带符号)值(例如-1,-255,-1324等)所需的位数? / p>
目前我已经实现了一个函数来计算大于等于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)。
感谢您的帮助:)
答案 0 :(得分:1)
假设您正在谈论整数数字。
要回答您的问题,您必须了解在所有现代平台上,整数被视为已签名或未签名。
JavaScript实际上不支持整数,它们存储为浮点值。但是,64位浮点数可以完全准确地处理53位整数,因此它可以轻松处理C使用的16位整数。
我会忽略这些并将我的答案限制为您用来与C交谈的16位整数。
16位无符号位整数的值可以为:0 - 65535
签名整数的值可以为:−32,768 to 32,767
在两种编码下,数字0 - 32,767
以相同的方式存储。处理没有区别。
但是,使用名为two's compliment的系统存储数字32,768 - 0
。
按比例,数字-1
和32,768
是相同的。 -2
和32,767
是相同的。
因此,计算负整数所需位的最简单方法是将其转换为带符号的等效值。