首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript按位运算符在意外位置追加1

JavaScript按位运算符在意外位置追加1
EN

Stack Overflow用户
提问于 2018-08-14 04:07:41
回答 1查看 88关注 0票数 2

当我在javascript上运行0x00000000C17E000F & 0x00000000C17E0000时,它返回-1048707072而不是3246260224

每个is的二进制

  • 0x00000000C17E000F:(省略32个) 1100 0001 0111 1110 0000 0000 0000 1111
  • 0x00000000C17E0000:(省略32个) 1100 0001 0111 1110 0000 0000 0000

  • 3246260224:(32 of 省略) 1100 0001 0111 1110 0000 0000 0000 0000
  • -1048707072:(32 of 1省略) 1100 0001 0111 1110 0000 0000 0000

为什么Javascript在那里计算0 & 01 ( 33到64位)?

(我听说Javascript数字是64位的。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 04:13:30

来自the MDN on bitwise operators

将操作数转换为32位整数,并由一系列位(0和1)表示。超过32位的数字会丢弃其最高有效位。

您的数字不在-2^31和2^31之间,因此它们会因转换而更改。

注意,这并不是真正的溢出,也不是存储的限制: Javascript中的数字是64位(IEEE754双精度),这意味着它们可以存储-2^53到2^53之间的所有整数。根据设计,32位的限制仅限于按位运算符。

这句话的结果是,您可以很好地设计自己的函数来对更大的整数执行逐位运算:

代码语言:javascript
复制
function and(a, b){
    let abits = Array.from(a.toString(2));
    let bbits = Array.from(b.toString(2));
    return parseInt(abits.map((abit, i)=>abit & bbits[i]).join(""), 2);
}
console.log(and(0x00000000C17E000F, 0x00000000C17E0000)); // 3246260224
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51829844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档