绝对值
实例六:绝对值
 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;
};
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号