【问题标题】:How do I calculate how many bits are needed to represent any negative value?如何计算需要多少位来表示任何负值?
【发布时间】:2014-10-06 21:15:17
【问题描述】:

我想知道是否有一种计算方法可以让我获得存储任何负(有符号)值(例如 -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)。

感谢您的帮助:)

【问题讨论】:

  • JS中任意数字以64位格式存储。
  • @hindmost:是的,我知道。但是我正在编写一个与 C++ 服务器在非常低级别的基础上通信的应用程序。所以实际上我必须处理 ArrayBuffers etc.pp。并且必须照顾好我的位;)
  • 所以您的问题与 Javascript 无关。用C++标记它
  • 嗯,这个问题与任何特定的编程语言都没有关系,它一般指的是 IT 和软件。我的应用程序是用 javascript 构建的,但无论如何我现在也用 C++ 标记了它...... ;)

标签: javascript c++ binary decimal signed


【解决方案1】:

假设您说的是整数数字

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

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

我将忽略这些并将我的答案限制在您用来与 C 对话的 16 位整数。

16 位 无符号 位整数可以具有以下值:0 - 65535

有符号整数可以具有以下值:−32,768 to 32,767

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

但是,号码32,768 - 0 是使用称为two's compliment 的系统存储的。

按位计算,-132,768 的数字是相同的。 -232,767 是一样的。

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

【讨论】:

  • 它只支持53个整数吗?还是 dir 你的意思是所有 53 位整数?
  • 53 位。感谢您了解这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多