如何从下面的代码中删除三元运算符?我正在寻找只使用整数运算符(移位,加法等)的东西.
a = (a < 0) ? (-a * 2) - 1 : (a * 2)
Run Code Online (Sandbox Code Playgroud)
在我的头顶,假设a是int:
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)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |