写一个>的可能方法0? -1:1以不同的方式?

时间:2018-01-30 18:44:22

标签: java

是否可以以任何不同的方式重写此代码?使用按位运算符或类似的东西。

return a > 0 ? -1 : 1;

1 个答案:

答案 0 :(得分:2)

  

使用按位运算符的不同方式

绝对可能

return ((a * -1) >>> 31) * -2 + 1;

它不漂亮或不清楚,我不建议使用此

另请注意,这将打破a = -2147483648(否定的最大负值等于自身)

这是有效的,因为第一位对于负数是1而对于非负

是0

问题是,你想要积极和非积极的,所以我们通过乘以-1来否定

一旦我们对其进行了整理,将第一位移至最后一位将返回0/1,而非正/正

将此乘以-2将得出您想要的范围(1到-1),但会将其保留为0到-2

要解决此问题,请添加1

正如MFisherKDX在评论中指出的那样,乘法可以用位移

代替

但是因为我们只是向右移动,向左移动是适得其反的,所以我们可以向右移动一点

return 1 - (a * -1 >>> 30 & 2);
相关问题