【问题标题】:How to Bitwise OR two binary strings( containing 0's and 1's only ) if the strings are too large? (say string length upto 500)如果字符串太大,如何按位或两个二进制字符串(仅包含 0 和 1)? (说字符串长度可达 500)
【发布时间】:2021-05-24 01:33:45
【问题描述】:

如果字符串太大,如何按位或两个二进制字符串(仅包含 0 和 1)? (说字符串长度可达 500)

示例:

字符串1:强>的 “1111001000111001101101111100110100110011111000111111011010111111011111111010110011001111001100011101011110011111111110101100010100100001111101010110110110111110100111111001011100011111111000000101011111110110101111111101000111100010111111011111110101010110111010101010110111110110011010010011011101111”强>

字符串 2: “111010111111111111111110110110011111111101011100011100010011101100111100110001010110111111110100101001111101110111111010111100010111110111101111000111100101011111111001100111111010111111111011111111101010101001000010111111000110010100101101111011111010111000111111010011111100011100101111001111011111”强>

另外,如何将生成的二进制字符串解析为整数? (以 10 为基数)

【问题讨论】:

  • 你尝试过什么吗?什么不起作用?
  • 我尝试过使用 parseInt() ,然后对整数使用 OR ( ^ ) 并转换回二进制。它适用于小输入,但显然不适用于大输入..

标签: javascript bit-manipulation bitwise-operators implementation string-comparison


【解决方案1】:

使用BigInt(注意二进制字符串开头的0b):

var String1 = "0b1111001000111001101101111100110100110011111000111111011010111111011111111010110011001111001100011101011110011111111110101100010100100001111101010110110110111110100111111001011100011111111000000101011111110110101111111101000111100010111111011111110101010110111010101010110111110110011010010011011101111";

var String2 = "0b111010111111111111111110110110011111111101011100011100010011101100111100110001010110111111110100101001111101110111111010111100010111110111101111000111100101011111111001100111111010111111111011111111101010101001000010111111000110010100101101111011111010111000111111010011111100011100101111001111011111";

var bitwise_or = BigInt(String1) | BigInt(String2);

document.querySelector('#bigint').innerText = bitwise_or; // BigInt (Base 10)
document.querySelector('#binstr').innerText = bitwise_or.toString(2); // Binary String
p { word-wrap: break-word; }
<p id="bigint"></p>
<p id="binstr"></p>

【讨论】:

  • 另外,如何将生成的二进制字符串转换为整数? (以 10 为基数)
  • @HannanKhan 只需将10 作为基础而不是2 传递给toString
  • @HannanKhan 变量 xor 是一个以 10 为底的 BigInt 表示形式,xor.toString(b) 将其转换为以 b 为底的字符串(默认为 b = 10,所以 xor.toString() 就足够了,但是,对于将来的算术操作,请保留变量 xorBigInt)。
  • @MrGeek 我怎么没注意到。我想要 OR 操作而不是 XOR。那么它对 OR 也同样有效吗?只用管道( | )替换插入符号( ^ )?
  • @HannanKhan 是的,它的工作方式类似,'0b' 仍然存在,它告诉BigInt 构造函数输入的字符串是二进制数,而不是基数为 10 的十进制数。
【解决方案2】:

您可以使用索引的偏移量来迭代字符串。

function or(a, b) {
    let result = '',
        i = Math.min(a.length, b.length),
        offsetA = a.length - i,
        offsetB = b.length - i;
    
    while (i--) result = (a[i + offsetA] | b[i + offsetB]) + result;
    result = a.slice(0, offsetA) + b.slice(0, offsetB) + result;
    return result;
}

console.log(or('11', '1100'));
console.log(or('1100', '11'));

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 2013-03-24
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2017-03-09
    • 2021-09-20
    • 2013-04-08
    相关资源
    最近更新 更多