前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言位运算取反_c语言取反程序

c语言位运算取反_c语言取反程序

作者头像
全栈程序员站长
发布2022-09-21 10:38:40
4.2K0
发布2022-09-21 10:38:40
举报

大家好,又见面了,我是你们的朋友全栈君。

先说结论

假设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)成立。证毕。

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170477.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档