是否可以以任何不同的方式重写此代码?使用按位运算符或类似的东西。
return a > 0 ? -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);