当前位置:  开发笔记 > 编程语言 > 正文

Javascript中的无符号整数

如何解决《Javascript中的无符号整数》经验,为你挑选了4个好方法。

我正在处理一个处理IP地址信息的页面,但它正在扼杀整数已签名的事实.我使用按位运算符来加速它,但第64位(有符号/无符号标志)正在弄乱它.

有没有办法强制数字在Javascript中无符号?它似乎工作正常,直到子网大于30或小于2.

试试这个:








结果:

1073741824 -2147483648 1

bobince.. 78

document.write( (1 << 31) +"
");

<<操作者被定义为符号的32位整数(从双精度浮点的天然数存储转换)工作.所以1<<31必须导致负数.

使用无符号32位整数的唯一JavaScript运算符是>>>.您可以利用它将您正在使用其他位运算符的已编号的有符号整数转换为无符号整数的数字:

document.write(( (1<<31)>>>0 )+'
');

与此同时:

document.write( (1 << 32) +"
");

因为所有的移位操作只使用最低的5位移位(在JavaScript和其他类似C语言中),所以不会起作用.<<32等于<<0,即.没变.



1> bobince..:
document.write( (1 << 31) +"
");

<<操作者被定义为符号的32位整数(从双精度浮点的天然数存储转换)工作.所以1<<31必须导致负数.

使用无符号32位整数的唯一JavaScript运算符是>>>.您可以利用它将您正在使用其他位运算符的已编号的有符号整数转换为无符号整数的数字:

document.write(( (1<<31)>>>0 )+'
');

与此同时:

document.write( (1 << 32) +"
");

因为所有的移位操作只使用最低的5位移位(在JavaScript和其他类似C语言中),所以不会起作用.<<32等于<<0,即.没变.


+1:非常有用.我想知道为什么`1 << 32`导致1而不是0.

2> moonshadow..:

使用>>>代替>>来获得无符号右移而不是符号扩展.无论int是否有符号,所有其他按位运算符的行为方式都相同.

您的代码打破"当子网...小于2"时有关.听起来你可能有一些与整数签名无关的错误.



3> Artem Latysh..:

Douglas Crockford认为按位运算符是javascript的坏处之一:

在Java中,按位运算符使用整数.JavaScript没有整数.它只有双精度浮点数.因此,按位运算符将其操作数转换为整数,执行其业务,然后将其转换回来.在大多数语言中,这些运算符非常接近硬件并且速度非常快.在JavaScript中,它们离硬件很远,而且非常慢.JavaScript很少用于进行位操作.

- 道格拉斯·克罗克福德在"JavaScript:好的部分",附录B,按位运算符(重点补充)

你确定按位运算符真的能加速你的逻辑吗?



4> Georg Schöll..:

Javascript没有整数,所有数字实际上都是双精度数.

Mozilla的Javascript 1.5参考建议人们只能对32位数字安全地使用按位运算.


我在某处读到,当你进行按位操作时,它会被转换为一个整数,并返回到给定的类型(我会假设为double).
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有