我需要使用Bit运算符比较两个整数.我遇到了一个问题,我必须比较两个整数而不使用比较运算符.使用位运算符会有所帮助.但是如何?
让我们说a = 4; b = 5;
我们必须表明a不等于b.但是,我想进一步扩展它,比方说,我们将展示哪个更大.这里b更大..
您至少需要与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)
您可以实现+
通过与位操作的一系列位的>>
<<
&
|
和^
,但我不会造成上你.
归档时间: |
|
查看次数: |
7788 次 |
最近记录: |