在計算機內,數(shù)據(jù)都是以二進制形式的補碼存儲和運算幔亥,正數(shù)的補碼為它的原碼耻讽,而負數(shù)的補碼=反碼+1,對于負數(shù)的反碼帕棉,是除了符號為不變针肥,其他都取反饼记,可以發(fā)現(xiàn)把負數(shù)補碼取反加1,此時就把符號位給去掉了慰枕,其他不變具则,也它的絕對值。公式如下:
-n=~(-n)+1;
我們可以知道當一個正數(shù)^0(^位異或:相同為0具帮,不同為1)等于它本身博肋,而一個負數(shù)^-1,為蜂厅,等于取反匪凡。經上面分析,求一個整數(shù)n絕對值為
int y = n>>31;
n = (n^y)-y