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

按位取反计算_c语言按位异或运算符

作者头像
全栈程序员站长
发布2022-09-21 10:38:32
1.3K0
发布2022-09-21 10:38:32
举报
文章被收录于专栏:全栈程序员必看

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

今天我在看简明Python指南的时候,看到其中一个计算机计算的问题,它是这样描述的:

x的按位取反结果为-(x+1) ~5 输出 -6。有关本例的更多细节可以参阅:http://stackoverflow.com/a/11810203

看到这儿我就疑惑了,之前在大学中学习的计算机基础课程又还给教材了,hhh… 无奈,我只好取网上搜寻解析的答案,而网上的解释说得不太让人明白,自己结合他人的解释进行了一番整理,把思路排版出来,供后来者参阅:


首先要明确的一点是,计算机内部在做数学运算时(也就是计算机的0和1的运算),都是以补码为标准的,说白了 计算机中就一种码那就是补码,而现实社会中的编码规则,例如原码、反码都是我们自定义的,为了和计算机中的补码形成转换关系。所以说在我们手工计算这类由计算机计算的01运算,要站在计算机的角度。因此首先就要将我们的原码反码什么的全都先转为补码,再来计算_。这样才能使得正数和负数的表示统一起来,具体可以参阅【补码的历史】,这里不过多展开了。 接着来看那个问题,从问题入手,解决了实际问题,概念也就自然了然于心了。_

5的补码是它本身(ps:正数的原、反、补码都是它本身;负数的原码最高为为1开头,反码是最高符号位不变,其余位在原码的基础上取反,补码是在反码的基础上+1即可得到) 5的补码:00000101

~5 (也就是5按位取反运算,下面涉及的是补码运算): 00000101按位取反,这里需要将原始01串完全反转过来,不存在最高符号位的概念,取反结果为: 11111010

注意这里的结果是用补码表示的,毕竟这还是机器表示形式,转化为自然语言的编码,把结果转化为原码就是: 补码-1转为反码: 11111010 - 1 = 11111001 反码再取反转为原码:11111001 = 10000110 原码转为十进制,答案就是-6

按位取反的快捷运算公式 -(x+1),至于这个公式怎样推理出来的,这里不作介绍。 关于~x=-(x+1)的证明,有兴趣的可以看看这篇:https://www.cnblogs.com/zjutzz/p/10646760.html。懂原理才能记得牢固,一个快捷计算公式只是为了计算时方便。

转载请注明出处:http://blog.csdn.net/coder__cs/article/details/79186677 本文出自【elon33的博客

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

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

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

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

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

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