java - 使用位运算符比较两个整数

标签 java integer

我需要使用位运算符比较两个整数。 我遇到了一个问题,我必须在不使用比较运算符的情况下比较两个整数。使用位运算符会有所帮助。但是如何呢?

让我们说 一 = 4; b = 5;

我们必须证明 a 不等于 b。 但是,我想进一步扩展它,比如说,我们将展示哪个更大。这里 b 更大..

最佳答案

您至少需要与 0 进行比较,理论上这是 CPU 进行比较的方式。例如

等于可以建模为 ^因为位必须相同才能返回 0

(a ^ b) == 0

如果这是 C你可以删除 == 0因为这可以暗示

!(a ^ b)

但是在 Java 中你不能转换 intboolean至少没有一些比较。

为了进行比较,您通常会做一个减法,尽管它会处理溢出。

(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/

相关文章:

java - 理解双重递归

python - 根据值和规则拆分整数列表的更好方法

java - 与反馈异步运行高计算任务

允许轻松连接 BitSet 的 Java BitSet

java - 如何为 jsonPath 匹配器正确转换 java 对象?

java - 字节数组到 int java 在 Windows 中工作而不是在 linux 中

erlang - ebin 中的雅司病和 erlang 梁文件

javascript - 根据字符串中的数字对数组中的字符串进行排序

c# - 在 Visual Studio 中捕获整数溢出异常

java - 带有特殊字符的 Xstream