用位运算求一个数的绝对值

在计算机内,数据都是以二进制形式的补码存储和运算,正数的补码为它的原码,而负数的补码=反码+1,对于负数的反码,是除了符号为不变,其他都取反,可以发现把负数补码取反加1,此时就把符号位给去掉了,其他不变,也它的绝对值。公式如下:

-n=~(-n)+1;

我们可以知道当一个正数^0(^位异或:相同为0,不同为1)等于它本身,而一个负数^-1,为,等于取反。经上面分析,求一个整数n绝对值为

int y = n>>31;

n = (n^y)-y

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可...
    yang2yang阅读 6,787评论 1 13
  • 书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...
    困卡阅读 16,241评论 2 8
  • 数据在计算机中都是以补码形式存放的,位运算也是以一个数的补码进行运算,结果也自然也是一个补码,这点在分析计算过程时...
    SharpChen阅读 4,012评论 0 4
  • 引言 先说几句屁话,觉得啰嗦可以忽略跳过这段屁话。俗话说:眼看他起高楼,眼看他宴宾客,眼看他楼塌了。我想这句话放在...
    xpleemoon阅读 8,166评论 10 49
  • 他对艺术有着深刻的鉴赏力,对美有着敏锐的洞察力。他笃信,当时还名不见经传,落魄不堪,甚至连画商都不屑于为他卖画且人...
    夏夜繁星阅读 4,371评论 0 3