Java 写a>;0 ? -1:1以另一种方式?

Java 写a>;0 ? -1:1以另一种方式?,java,Java,有可能以任何不同的方式重写此代码吗?使用按位运算符或类似的方法 返回a>0-1 : 1; 使用位运算符的不同方式[…] 绝对可能 return ((a * -1) >>> 31) * -2 + 1; 它既不美观也不清晰,我不建议使用它 还请注意,这将中断a=-2147483648(被否定的最大负值等于其本身) 这是因为第一位为1表示负数,0表示非负数 问题是,你们想要正的和非正的,所以我们用-1来否定 一旦我们解决了这个问题,将第一位移到最后一位将返回0/1,表示a为非正/

有可能以任何不同的方式重写此代码吗?使用按位运算符或类似的方法

返回a>0-1 : 1;

使用位运算符的不同方式[…]

绝对可能

return ((a * -1) >>> 31) * -2 + 1;
它既不美观也不清晰,我不建议使用它

还请注意,这将中断a=-2147483648(被否定的最大负值等于其本身)


这是因为第一位为1表示负数,0表示非负数

问题是,你们想要正的和非正的,所以我们用-1来否定

一旦我们解决了这个问题,将第一位移到最后一位将返回0/1,表示a为非正/正

将该值乘以-2将得到所需的范围(1到-1),但将保留为0到-2

要解决此问题,请添加1


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

但由于我们只是向右移动,向左移动会适得其反,所以我们可以稍微向右移动一点

return 1 - (a * -1 >>> 30 & 2);

为什么这段代码的长度很重要?你对角色(比如高尔夫)有限制吗?你使用的是逻辑运算符。可能更适合你。你能为你的代码提供一些注释吗?是的awesome@rocknow我在写,只是确保代码正常工作你可以用一个shift@MFisherKDX是的,但如果将其保留为乘法,则会为其他输出打开它(即返回-50和6)。但鉴于此,我想到了一个不同的解决方案