Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript逐位64位实现_Javascript_Integer_64 Bit_Bit Manipulation - Fatal编程技术网

javascript逐位64位实现

javascript逐位64位实现,javascript,integer,64-bit,bit-manipulation,Javascript,Integer,64 Bit,Bit Manipulation,在javascript中,我们不能在按位操作中计算大于32位的值。但在c#中,我们可以做到这一点 下面是我们尝试运行以下一个浏览器控制台的示例 4294967296和8589934591 它返回0,但在C#中返回4294967296 我在谷歌上搜索了一下,发现我们可以用这个来实现大于32位的实现 但我的问题是,我无法找到在客户端实现逻辑的示例 有人能帮我吗 提前谢谢我想你真的不需要goog.math.long? 只需将其转换为字符串、拆分即可。然后进行和操作并重新组合: var a = 8589

在javascript中,我们不能在按位操作中计算大于32位的值。但在c#中,我们可以做到这一点

下面是我们尝试运行以下一个浏览器控制台的示例

4294967296和8589934591

它返回0,但在C#中返回4294967296

我在谷歌上搜索了一下,发现我们可以用这个来实现大于32位的实现

但我的问题是,我无法找到在客户端实现逻辑的示例

有人能帮我吗


提前谢谢

我想你真的不需要goog.math.long? 只需将其转换为字符串、拆分即可。然后进行操作并重新组合:

var a = 8589934592;
var str = a.toString()
var subNumber1 = parseInt(str.slice(0, str.length - 5));
var subNumber2 = parseInt(str.slice(str.length - 5));
var res1 = (subNumber1 & subNumber1).toString();
var res2 = (subNumber2 & subNumber2).toString();
var res = parseInt(res1.concat(res2));
console.log(res);

我想你真的不需要数学课吗? 只需将其转换为字符串、拆分即可。然后进行操作并重新组合:

var a = 8589934592;
var str = a.toString()
var subNumber1 = parseInt(str.slice(0, str.length - 5));
var subNumber2 = parseInt(str.slice(str.length - 5));
var res1 = (subNumber1 & subNumber1).toString();
var res2 = (subNumber2 & subNumber2).toString();
var res = parseInt(res1.concat(res2));
console.log(res);

我不确定这是否是您想要的,但如果您使用的是带有npm的google/closure库。您可以使用或将模块捆绑到客户端。

我不确定这是否是您想要的,但如果您使用的是带有npm的google/closure库。您可以使用或将模块捆绑到客户端。

我从这个URL得到了线索,但没有使用goog.math.Long

这是一个用于任意大整数的有趣函数:

function BitwiseAndLarge(val1, val2) {
    var shift = 0, result = 0;
    var mask = ~((~0) << 30); // Gives us a bit mask like 01111..1 (30 ones)
    var divisor = 1 << 30; // To work with the bit mask, we need to clear bits at a time
    while( (val1 != 0) && (val2 != 0) ) {
        var rs = (mask & val1) & (mask & val2);
        val1 = Math.floor(val1 / divisor); // val1 >>> 30
        val2 = Math.floor(val2 / divisor); // val2 >>> 30
        for(var i = shift++; i--;) {
            rs *= divisor; // rs << 30
        }
        result += rs;
    }
    return result;
}
函数按位和大(val1,val2){
var移位=0,结果=0;
变量掩码=~(~0)>30
val2=数学地板(val2/除数);//val2>>>30
对于(var i=shift++;i--;){

rs*=除数;//rs我从这个URL得到了线索,但没有使用goog.math.Long

这是一个用于任意大整数的有趣函数:

function BitwiseAndLarge(val1, val2) {
    var shift = 0, result = 0;
    var mask = ~((~0) << 30); // Gives us a bit mask like 01111..1 (30 ones)
    var divisor = 1 << 30; // To work with the bit mask, we need to clear bits at a time
    while( (val1 != 0) && (val2 != 0) ) {
        var rs = (mask & val1) & (mask & val2);
        val1 = Math.floor(val1 / divisor); // val1 >>> 30
        val2 = Math.floor(val2 / divisor); // val2 >>> 30
        for(var i = shift++; i--;) {
            rs *= divisor; // rs << 30
        }
        result += rs;
    }
    return result;
}
函数按位和大(val1,val2){
var移位=0,结果=0;
变量掩码=~(~0)>30
val2=数学地板(val2/除数);//val2>>>30
对于(var i=shift++;i--;){
rs*=除数;//rs
使用goog.math.Long的javascript逐位64位实现

  • 添加Js库
  • 注释js库中的
    //goog.provide('goog.math.Long')
  • 在js库中添加
    var goog={};goog.math={};
  • 调用函数
    var val1=goog.math.Long.fromString(“4611686018427387904”);
以下是示例:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Bitmask 64 Bit</title>
    <script type="text/javascript" src="goog.math.long.js"></script>
    <script type="text/javascript">
        var val1 = goog.math.Long.fromString("4611686018427387904"); // 2^62
        var val2 = goog.math.Long.fromString("6917529027641081856"); // 2^61 | 2^62
        var val3 = goog.math.Long.fromString("2305843009213693952"); // 2^61
        var val4 = goog.math.Long.fromString("4611686018427387904"); // 2^62
        document.writeln(val1.and(val2)); // 2^62 & (2^61 | 2^62)  
        document.writeln(val3.or(val4));  // 2^61 | 2^62
    </script>
</head>
<body>
</body>
</html>

位掩码64位
var val1=goog.math.Long.fromString(“4611686018427387904”);/2^62
var val2=goog.math.Long.fromString(“6917529027641081856”);/2^61 | 2^62
var val3=goog.math.Long.fromString(“2305843009213693952”);/2^61
var val4=goog.math.Long.fromString(“4611686018427387904”);/2^62
document.writeln(val1.and(val2));//2^62&(2^61 | 2^62)
document.writeln(val3.or(val4));//2^61 | 2^62
使用此库需要许可证

使用goog.math.Long的javascript逐位64位实现

  • 添加Js库
  • 注释js库中的
    //goog.provide('goog.math.Long')
  • 在js库中添加
    var goog={};goog.math={};
  • 调用函数
    var val1=goog.math.Long.fromString(“4611686018427387904”);
以下是示例:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Bitmask 64 Bit</title>
    <script type="text/javascript" src="goog.math.long.js"></script>
    <script type="text/javascript">
        var val1 = goog.math.Long.fromString("4611686018427387904"); // 2^62
        var val2 = goog.math.Long.fromString("6917529027641081856"); // 2^61 | 2^62
        var val3 = goog.math.Long.fromString("2305843009213693952"); // 2^61
        var val4 = goog.math.Long.fromString("4611686018427387904"); // 2^62
        document.writeln(val1.and(val2)); // 2^62 & (2^61 | 2^62)  
        document.writeln(val3.or(val4));  // 2^61 | 2^62
    </script>
</head>
<body>
</body>
</html>

位掩码64位
var val1=goog.math.Long.fromString(“4611686018427387904”);/2^62
var val2=goog.math.Long.fromString(“6917529027641081856”);/2^61 | 2^62
var val3=goog.math.Long.fromString(“2305843009213693952”);/2^61
var val4=goog.math.Long.fromString(“4611686018427387904”);/2^62
document.writeln(val1.and(val2));//2^62&(2^61 | 2^62)
document.writeln(val3.or(val4));//2^61 | 2^62

使用此库需要许可证。

您链接到的文档清楚地提到了
方法。当您尝试它时会发生什么?您的意思是?ln.130-139和ln.51-63添加JS文件后,我得到的是undefined@shankar.siva记住:在使用之前,你需要包括你所使用的任何库。你是怎么做到的你包括它吗?我找不到需要包括哪些库。你链接到的文档清楚地提到了一个
方法。当你尝试它时会发生什么?你是说?ln.130-139和ln.51-63添加JS文件后,我得到的是undefined@shankar.siva记住:你需要包括你使用的任何库在你使用它之前。你是如何包含它的?我无法找到需要包含哪些库。为什么这样做是正确的?(实际上,它是正确的吗?)好吧,没有简单的方法将位运算与十进制数字的变化联系起来。我的意思是,它现在可以工作了,但那是因为无论
x
的意义有多大,
x
始终都是真的。如果你有
a
b
的话,这是不可能的。你几乎没有误解了这个问题。现在我更新了不同的例子。你能检查一下吗。为什么正确?(事实上,正确吗?)好吧,没有简单的方法将位运算与十进制数字的变化联系起来。我的意思是,它现在可以工作了,但那是因为无论
x
的意义有多大,
x
始终都是真的。如果你有
a
b
的话,这是不可能的。你几乎没有误解了这个问题。现在我更新了不同的例子。你能检查一下吗。