#include <iostream>
int GetAbsoluteValue(int value)
{
int mask = value >> sizeof(int) - 1;
return (value + mask) ^ mask;
}
int main()
{
int res = GetAbsoluteValue(-4);
std::cout << res << std::endl;
return 0;
};
步骤:
1. 将value移动31位,得到mask,
如果是负数则变为全1,(负数右移补0)1111....1111。
如果为正数则变为全0,0000....0000。
2. 将value + mask。
如果value为负数,则为value - 1。(1111....1111是-1)举个例子,假如是-5的话,减去1,就得到了5的反码,因为-5是5的反码加上1得来的。
如果value为正数,仍然得到value。
3. 异或操作 (value + mask) ^ mask。
如果value为负数,这时候要对(value + mask) 取反,mask这时也为全1,所以(value + mask) ^ mask,因为0于1异或为1,1与1异或为0。得到将反码取反的效果。
如果val