我需要使用位运算符比较两个整数。 我遇到了一个问题,我必须在不使用比较运算符的情况下比较两个整数。使用位运算符会有所帮助。但是如何呢?
让我们说 一 = 4; b = 5;
我们必须证明 a 不等于 b。 但是,我想进一步扩展它,比如说,我们将展示哪个更大。这里 b 更大..
最佳答案
您至少需要与 0 进行比较,理论上这是 CPU 进行比较的方式。例如
等于可以建模为 ^
因为位必须相同才能返回 0
(a ^ b) == 0
如果这是 C
你可以删除 == 0
因为这可以暗示
!(a ^ b)
但是在 Java 中你不能转换 int
到 boolean
至少没有一些比较。
为了进行比较,您通常会做一个减法,尽管它会处理溢出。
(long) a - b > 0 // same as a > b
减法与加负数相同,负数与 ~x+1 相同,所以你可以这样做
(long) a + ~ (long) b + 1 > 0
删除 +1
你可以把它改成
(long) a + ~ (long) b >= 0 // same as a > b
你可以实现 +
作为 >>
的一系列逐位操作<<
&
|
和 ^
但我不会把它强加给你。
关于java - 使用位运算符比较两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678344/