首页 > 编程语言 > 详细

C语言按位取反快速计算

时间:2019-04-03 10:56:09      阅读:471      评论:0      收藏:0      [点我收藏+]

先说结论

假设x为signed int,也就是说它的补码表示中第一位表示符号(1:负;0:正),那么~x=-(x+1)

证明

计算机内部使用补码表示,则问题相当于求证:当x为signed int时,(~x)补=[-(x+1)]补 (0)

证明:
因为补码有个规律:(x+y)补=(x)补+(y)补,所以:

[-(x+1)]补
= [(-x)+(-1)]补
= (-x)补 + (-1)补

要证(~x)补=[-(x+1)]补,只需要证(~x)补-(-x)补=(-1)补 (1)

考虑到:
(~x)补-(-x)补
=(~x)补+(-(-x)补) (2)


(-x)补+(-(-x))补
= [(-x) + (-(-x))]补
= [(-x) + x ]补
= 0
也就是说-(-x)补=(-(-x))补 (3)

把(3)带入(2),得到:
(~x)补-(-x)补
= (~x)补+(-(-x))补
= [(~x) + x ]补
= [1111...11]补 (所有位都为1)
= [1111...10]反 (最后一位为0,其它位都为1)
= [1000...01]原 (第一位和最后一位为1,其它位都为0)
= (-1)补

也即(1)得证,因而(0)成立。证毕。

C语言按位取反快速计算

原文:https://www.cnblogs.com/zjutzz/p/10646760.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!