Java 在使用`>;之前检查模块的备选方案>;`?
在-Java、C#、Javascript中: AFAIU—Java 在使用`>;之前检查模块的备选方案>;`?,java,c#,javascript,bitwise-operators,Java,C#,Javascript,Bitwise Operators,在-Java、C#、Javascript中: AFAIU—>是一个右移操作数,它还可以处理有符号数: 以下方面没有问题: 12>>2-->3 对于签名号码: -12>>2-->-3 但当十进制结果不是整数时,结果不同: 10>>2-->2 鉴于-10>>2-->-3 我完全知道为什么会发生这种情况(通过二的补语),但是: 问题: 这是否意味着当我使用有史以来最快的除法时,我必须检查: 10%4不是零 我是不是遗漏了什么 您可以使用诸如Integer.numberOfTrailingZeros()
>
是一个右移操作数,它还可以处理有符号数:
以下方面没有问题:
12>>2-->3
对于签名号码:
-12>>2-->-3
但当十进制结果不是整数时,结果不同:
10>>2-->2
鉴于-10>>2-->-3
我完全知道为什么会发生这种情况(通过二的补语),但是:
问题:
这是否意味着当我使用有史以来最快的除法时,我必须检查:
10%4
不是零
我是不是遗漏了什么 您可以使用诸如
Integer.numberOfTrailingZeros()
和Long.numberOfTrailingZeros()
之类的方法来判断移位是精确的还是截断的
您还可以使用按位和测试最后一位,例如测试最后4位:
int i = 543;
if ((i & 0x0f) == i )
System.out.println("Last 4 bits are zeros!");
不过请注意,对于“快速”除法,不值得使用位移位。你不会比编译器更聪明,因为今天的大多数编译器都足够智能,可以优化这些情况
有关这方面的更多信息:
编辑:
您的问题的答案是,位移位并不是“有史以来最快的除法”,而是定义为它的名称:位移位,在负数的情况下,它会给出(或可能给出)不同的结果
你没有遗漏任何东西。如果您的输入可以是负数,则有两个选项:
你的回答是关于检查最后一位。我的问题不是关于检查,而是通过负值sp.s除法结果不同的问题。我发现JS中一个可能的解决方案是
-~~(10>>2)
我建议删除ieee-754
标签;这与问题无关。