在 javascript 中设置位 31 是否正确
Is it correct to set bit 31 in javascript?
当我尝试设置31位0 | 1 << 31
时,我得到以下结果:
console.log(0 | 1 << 31); // -2147483648
这实际上是:
console.log((-2147483648).toString(2)) // -10000000000000000000000000000000
设置 31 位是否正确,还是应该限制为 30
以防止负值?
ECMA5
,按位运算符和移位运算符在 32 位整数上运行,因此在这种情况下,最大安全整数为 2^31-1 或 2147483647。
这里有一个解释。
<<
运算符定义为处理有符号32-bit
整数(从双精度浮点数的本机 Number 存储转换而来)。因此1<<31
必须产生负数。唯一使用无符号
32-bit
整数的 JavaScript 运算符是>>>
。您可以利用此问题将您一直在使用其他按位运算符处理的有符号整数转换为无符号整数:
(1<<31)>>>0
大多数按位运算被指定为将其操作数转换为有符号的 32 位整数。使用位 31 是完全正确的,但是是的,你会得到负值。通常,如果您正在执行按位运算并不重要,因为您(应该)关心的只是位模式,而不是数字的十进制值。
如果你确实想要一个正值,你可以用 >>> 0
将其转换回来,因为指定>>>
将其操作数转换为无符号的 32 位整数。
console.log((0 | 1 << 31) >>> 0);
相关文章:
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- html元素是否具有内置的属性
- Javascript是否为具有未定义值的变量分配32位内存
- JavaScript画布可以像位图一样操作吗?它是否为此进行了优化
- 在使用Jest进行测试时,是否有更快的方法重置mock
- 是否可以在另一个后置请求中转发一个后置请求对象
- 使用内置的 like 操作 (og.likes) 检查当前用户是否喜欢某个 URL
- 检查给定的 5 位数字中的所有 5 位数字是否相同
- 是否可以使用图表内置方法将谷歌注释图表隐藏为 pdf/图像
- 是否可以流式传输在 javascript 中生成的八位字节流
- setTimeout() 是否自行重置
- 检测 Chrome 浏览器安装版本是否为 64 位
- 是否可以在单击时将类(特别是其动画)重置回其初始状态
- 替换 Base64 - http/https 通信是否 8 位干净
- 在 javascript 中设置位 31 是否正确
- 是否可以将JavaScript变量的大小限制为位
- 在检查字符串是否至少有5位数字时,没有字母或特殊字符会产生意外结果
- 是否有一个内置函数可以将创建日期添加到couchDB中的文档中
- 检查输入是否至少包含8个字符、1位数字和1个字母