将两个32位整数转换为一个带符号的64位整数字符串

最大限度

我有一个需要在PostgreSQL中表示的64位无符号整数。我将其分解为两个32位无符号整数,highlow为了让Postgres的接受它,我需要转换high,并low以代表符号的64位整数的字符串。

如何将两个32位无符号整数转换为以十进制表示一个有符号64位整数的字符串?

控制论

我从https://codegolf.stackexchange.com/questions/1620/arbitrary-base-conversion修改了基本转换代码错误是我的,聪明是他们的。

我还必须添加一堆代码来处理负数(二进制补码)。

这段代码是ecmascript5,需要稍做修改才能在较旧的浏览器中工作。

function convert(hi, lo) {
  function invertBit(bit) {
    return bit == "0" ? "1" : "0";
  }

  function binaryInvert(binaryString) {
    return binaryString.split("").map(invertBit).join("");
  }

  function binaryIncrement(binaryString) {
    var idx = binaryString.lastIndexOf("0");
    return binaryString.substring(0, idx) + "1" + binaryInvert(binaryString.substring(idx + 1));
  }

  function binaryDecrement(binaryString) {
    var idx = binaryString.lastIndexOf("1");
    return binaryString.substring(0, idx) + binaryInvert(binaryString.substring(idx));
  }

  function binaryAbs(binaryString) {
    if (binaryString[0] === "1") {
      return invertBits(binaryDecrement(binaryString));
    }
    return binaryString;
  }

  function to32Bits(val) {
    var binaryString = val.toString(2);
    if (binaryString[0] === "-") {
      binaryString = Array(33 - (binaryString.length - 1)).join("1") + binaryInvert(binaryString.substr(1));
      return binaryIncrement(binaryString);
    }
    return Array(33 - binaryString.length).join("0") + binaryString;
  }

  var fullBinaryNumber = to32Bits(hi) + to32Bits(lo);
  var isNegative = fullBinaryNumber[0] === "1";

  fullBinaryNumber = binaryAbs(fullBinaryNumber);

  var result = "";

  while (fullBinaryNumber.length > 0) {
    var remainingToConvert = "", resultDigit = 0;
    for (var position = 0; position < fullBinaryNumber.length; ++position) {
      var currentValue = Number(fullBinaryNumber[position]) + resultDigit * 2;
      var remainingDigitToConvert = Math.floor(currentValue / 10);
      resultDigit = currentValue % 10;
      if (remainingToConvert.length || remainingDigitToConvert) {
        remainingToConvert += remainingDigitToConvert;
      }
    }
    fullBinaryNumber = remainingToConvert;
    result = resultDigit + result;
  }
  return (isNegative?"-":"") + result;
}

例子:

> // largest negative number -2^63 (just the most significant bit set)
> convert(1 << 31, 0)
'-9223372036854775808'
> // largest positive number
> convert(0x7fffffff, 0xffffffff)
'9223372036854775807'
> // -1 is all bits set.
> convert(0xffffffff, 0xffffffff)
'-1'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将32位带符号整数转换为64位无符号整数的高32位?

来自分类Dev

如何将32位带符号整数转换为64位无符号整数的高32位?

来自分类Dev

如何将 32 位浮点值转换为两个 16 位整数

来自分类Dev

用两个无符号的16位整数表示一个无符号的32位值

来自分类Dev

Python:如何将32位带符号长整数转换为7位int

来自分类Dev

(Java)将符号的字符串转换为一位整数数组

来自分类Dev

将 32 位有符号整数转换为 64 位整数,同时保留精确位

来自分类Dev

将两个32位整数的向量相乘,生成一个32位结果元素的向量

来自分类Dev

两个 16 位整数到一个 32 位浮点值

来自分类Dev

在python中计算两个带符号的64位整数之间的XOR时发生意外行为

来自分类Dev

将四个8位无符号整数合并为一个32位无符号整数

来自分类Dev

将四个8位无符号整数合并为一个32位无符号整数

来自分类Dev

Elixir一个将浮点数和整数都转换为位串的函数?

来自分类Dev

如何使用Lua将一对字节转换为带符号的16位整数?

来自分类Dev

将两个64位整数乘以128位然后>> >> 64位的最快方法?

来自分类Dev

汇编:使用两个32位寄存器中的值进行除法,就好像它们是一个64位整数一样

来自分类Dev

汇编:使用两个32位寄存器中的值进行除法,就好像它们是一个64位整数一样

来自分类Dev

将原始的14位二进制补码转换为带符号的16位整数

来自分类Dev

在JavaScript中将两个16位数字组合并转换为一个32位数字(浮点数)

来自分类Dev

将整数转换为带符号的2的补码二进制字符串

来自分类Dev

十六进制字符串到两个18位整数

来自分类Dev

将多于一个点的字符串转换为浮点数或整数?

来自分类Dev

如何将代码点32位整数数组(UTF-32?)转换为Windows本机字符串?

来自分类Dev

c ++将四个无正弦的字符转换为一个无符号整数

来自分类Dev

Javascript:将字符串变量解析为两个变量,一个作为字符串,另一个作为整数

来自分类Dev

这是将8个8位整数数组转换为1个64位整数的安全方法吗?

来自分类Dev

将1和0的32位二进制字符串转换为SQL Server中的带符号十进制数

来自分类Dev

如何将字符串变量转换为 int 并同时添加两个整数?

来自分类Dev

使用bash将Hex转换为带符号的64位

Related 相关文章

  1. 1

    如何将32位带符号整数转换为64位无符号整数的高32位?

  2. 2

    如何将32位带符号整数转换为64位无符号整数的高32位?

  3. 3

    如何将 32 位浮点值转换为两个 16 位整数

  4. 4

    用两个无符号的16位整数表示一个无符号的32位值

  5. 5

    Python:如何将32位带符号长整数转换为7位int

  6. 6

    (Java)将符号的字符串转换为一位整数数组

  7. 7

    将 32 位有符号整数转换为 64 位整数,同时保留精确位

  8. 8

    将两个32位整数的向量相乘,生成一个32位结果元素的向量

  9. 9

    两个 16 位整数到一个 32 位浮点值

  10. 10

    在python中计算两个带符号的64位整数之间的XOR时发生意外行为

  11. 11

    将四个8位无符号整数合并为一个32位无符号整数

  12. 12

    将四个8位无符号整数合并为一个32位无符号整数

  13. 13

    Elixir一个将浮点数和整数都转换为位串的函数?

  14. 14

    如何使用Lua将一对字节转换为带符号的16位整数?

  15. 15

    将两个64位整数乘以128位然后>> >> 64位的最快方法?

  16. 16

    汇编:使用两个32位寄存器中的值进行除法,就好像它们是一个64位整数一样

  17. 17

    汇编:使用两个32位寄存器中的值进行除法,就好像它们是一个64位整数一样

  18. 18

    将原始的14位二进制补码转换为带符号的16位整数

  19. 19

    在JavaScript中将两个16位数字组合并转换为一个32位数字(浮点数)

  20. 20

    将整数转换为带符号的2的补码二进制字符串

  21. 21

    十六进制字符串到两个18位整数

  22. 22

    将多于一个点的字符串转换为浮点数或整数?

  23. 23

    如何将代码点32位整数数组(UTF-32?)转换为Windows本机字符串?

  24. 24

    c ++将四个无正弦的字符转换为一个无符号整数

  25. 25

    Javascript:将字符串变量解析为两个变量,一个作为字符串,另一个作为整数

  26. 26

    这是将8个8位整数数组转换为1个64位整数的安全方法吗?

  27. 27

    将1和0的32位二进制字符串转换为SQL Server中的带符号十进制数

  28. 28

    如何将字符串变量转换为 int 并同时添加两个整数?

  29. 29

    使用bash将Hex转换为带符号的64位

热门标签

归档