如何从代码中消除条件?

Ale*_*dru 1 java

如何从下面的代码中删除三元运算符?我正在寻找只使用整数运算符(移位,加法等)的东西.

a = (a < 0) ? (-a * 2) - 1 : (a * 2)
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 7

在我的头顶,假设aint:

a = 2*a*(1+2*(a>>31)) - (a>>>31);
Run Code Online (Sandbox Code Playgroud)

>>是算术(签名)左移.因此a>>31用符号位替换所有位.所有位设置为-1.多个乘以2并加一个,负数转为-1,正数(和零)转为1.

>>>是逻辑(无符号)左移.因此a>>>31清除前31位并将符号位置于位0(0表示正数,0表示负数; 1表示负数).

做这样模糊的事情的"正确"方式是:

a ^= a>>31;
a *= 2;
Run Code Online (Sandbox Code Playgroud)

  • 我在这里给你一个+1,因为我的头疼了. (3认同)