绝对值
实例六:绝对值
32位系统
方法:y=x>>31
result=x^y-y;
x是要求绝对值的值,y为临时变量,result为x的绝对值。
一个负数右移31位后位-1;正数则为0;
为了方便 ,以8位位解释。
负数解释:
原数 1100 0011 ---- -3 方法中的x
移位31位 1100 0001 ---- -1 方法中的y
异或运算 0000 0010 ---- 2 方法中的x^y
减去y 1100 0001 ---- -1 方法中的y
结果 0000 0011 ---- 3 方法中的result
正数解释:
原数 0000 0011 ---- 3
移位31位 0000 0000 ---- 0
异或运算 0000 0011 ---- 3
减去y 0000 0000 ---- 0
结果 0000 0011 ---- 3
注意:两个负数的异或是正数,两个正数的异或仍然是正数。
代码:
int _tmain(int argc, _TCHAR* argv[])
{
int x,y,nResult=0;
cout << "请输入原始的值:";
cin >> x;
y = x >> 31;
nResult = (x^y) - y; //要加括号,算术运算符优先级高于位操作符
cout <<endl<< "该数的绝对值:" << nResult;
system("pause");
return 0;
};