javascript逐位64位实现
在javascript中,我们不能在按位操作中计算大于32位的值。但在c#中,我们可以做到这一点 下面是我们尝试运行以下一个浏览器控制台的示例 4294967296和8589934591 它返回0,但在C#中返回4294967296 我在谷歌上搜索了一下,发现我们可以用这个来实现大于32位的实现 但我的问题是,我无法找到在客户端实现逻辑的示例 有人能帮我吗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
提前谢谢我想你真的不需要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
的话,这是不可能的。你几乎没有误解了这个问题。现在我更新了不同的例子。你能检查一下吗。