用于在使用`>之前检查模块的备选方案>`
Alternative for checking module before using `>>`?
In-Java,C#,Javascript:
AFAIU->>
是一个右移操作数,也可以处理有符号数字:
没有问题
12>>2 --> 3
还有签名号码:
-12>>2 --> -3
但当十进制结果不是整数时,结果是不同的:
10>>2 --> 2
而-10>>2 --> -3
我完全知道为什么会发生这种情况(通过Two的补码(,但是:
问题:
这是否意味着,当我使用有史以来最快的除法>>
时,我必须检查:
10%4
不为零?
我是不是遗漏了什么?
您可以使用Integer.numberOfTrailingZeros()
和Long.numberOfTrailingZeros()
等方法来判断移位是准确的还是截断的。
您也可以使用逐位AND来测试最后的位,例如测试最后4位:
int i = 543;
if ((i & 0x0f) == i )
System.out.println("Last 4 bits are zeros!");
不过请注意,不值得使用位移进行"快速"除法。你不会比编译器聪明,因为现在的大多数编译器都足够聪明,可以优化这些情况。
更多关于这个:在C中使用移位运算符的乘法和除法实际上更快吗?
编辑:
你的问题的答案是,位移位并没有被定义为"有史以来最快的除法",它被定义为它的名字所说的:位移,在负数的情况下,它会给出(或可能给出(不同的结果。
你没有错过任何东西。如果你的输入可能是负数,你的2个选项是:
- 检查该值,如果它可能会给出不同的结果,请更正它或使用除法。一个简单的检查可能是测试它是否为负,或者测试最后一位(如上所述(
- 完全避免使用移位进行除法运算
相关文章:
- 在<页眉>标签
- Javascript,访问一个主要对象模块模式中的每个对象
- 如何更改<svg>标记为<img>用js标记
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- Ajax文件加载和<输入>文件加载
- 为什么要使用0>javascript中的0
- 从模块内部访问Express装载路径
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 链接所有<a>Meteor
- 在<输入类型=“;文件“/>
- <脚本类型=“;模块“>负载性能
- npm->错误:找不到模块'可读流'
- 揭示模块模式&变量范围->异步调用返回后未定义公共对象
- 用于在使用`>之前检查模块的备选方案>`