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

Zah*_*ain 10 java integer

我需要使用Bit运算符比较两个整数.我遇到了一个问题,我必须比较两个整数而不使用比较运算符.使用位运算符会有所帮助.但是如何?

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

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

Pet*_*rey 9

您至少需要与0进行比较,并且从概念上讲,这是CPU为比较所做的事情.例如

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

(a ^ b) == 0
Run Code Online (Sandbox Code Playgroud)

如果这是C你可以放弃,== 0因为这可以隐含

!(a ^ b)
Run Code Online (Sandbox Code Playgroud)

但在Java中,如果没有至少一些比较,则无法将其转换int为a boolean.

为了比较,你通常做一个减法,虽然一个处理溢出.

(long) a - b > 0 // same as a > b
Run Code Online (Sandbox Code Playgroud)

减法与添加负数相同,负数与~x + 1相同,所以你可以这样做

(long) a + ~ (long) b + 1 > 0
Run Code Online (Sandbox Code Playgroud)

放弃+1你可以改变这个

(long) a + ~ (long) b >= 0 // same as a > b
Run Code Online (Sandbox Code Playgroud)

您可以实现+通过与位操作的一系列位的>> << & |^,但我不会造成上你.