在计算机内,数据都是以二进制形式的补码存储和运算,正数的补码为它的原码,而负数的补码=反码+1,对于负数的反码,是除了符号为不变,其他都取反,可以发现把负数补码取反加1,此时就把符号位给去掉了,其他不变,也它的绝对值。公式如下:
-n=~(-n)+1;
我们可以知道当一个正数^0(^位异或:相同为0,不同为1)等于它本身,而一个负数^-1,为,等于取反。经上面分析,求一个整数n绝对值为
int y = n>>31;
n = (n^y)-y
在计算机内,数据都是以二进制形式的补码存储和运算,正数的补码为它的原码,而负数的补码=反码+1,对于负数的反码,是除了符号为不变,其他都取反,可以发现把负数补码取反加1,此时就把符号位给去掉了,其他不变,也它的绝对值。公式如下:
-n=~(-n)+1;
我们可以知道当一个正数^0(^位异或:相同为0,不同为1)等于它本身,而一个负数^-1,为,等于取反。经上面分析,求一个整数n绝对值为
int y = n>>31;
n = (n^y)-y
本文标题:用位运算求一个数的绝对值
本文链接:https://www.haomeiwen.com/subject/nsxpuxtx.html
网友评论