今天我在看简明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的博客】

~ 按位取反运算解析相关推荐

  1. c++中按位取反运算

    #include <stdio.h> #include <iostream>using namespace std;void main() {//做这类题目抓住两点:第一.无论 ...

  2. Python中按位取反运算操作的解法

    大家都知道5的取反(翻转)为-6.那么为什么会是-6呢?接下来我将详细介绍一下. 首先要明确几点(原码.反码.补码): 正数: 原码=反码=补码 负数 反码:符号位不变,其他位取反 补码 = 反码 + ...

  3. 在python中二进制位取反运算如何进行_Python位运算符详解

    Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计.驱动.图像处理.单片机等),在应用层开发(Web 开发.Linux 运维等)中并不常见.想加快学习进度, ...

  4. redis源码分析--zslRandomLevel位运算解析

    与&运算 0376的二进制就是1111 1110,二进制的与运算规则是,只有两个数同时为1时,则结果才为1,只要有一个数为0,则结果就为0.比如1&1=1; 1&0=0; 0& ...

  5. 按位取反运算,简短精炼

    概念: 补码:正数的补码就是原码,负数补码符号位不变,其余各位依次取反,最后末尾+1 反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0) 按位取反:所有位(符号位)都改变,0 ...

  6. ENVI_IDL:批量对Modis Swath产品进行均值运算+解析

    1. 实验内容: 如题所示,就是对Modis Swath产品进行均值运算 这里需要注意几点: ------------------------------------------ 第一: 由于每一个M ...

  7. (按位取反)运算的理解

    (按位取反)运算的理解: 按照我平时的理解,当我使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果(这点没问题) 例如,假如 ...

  8. 为什么地磅的读数有进制么_谈谈二进制(三)——位运算及其应用

    0. 概要 前两篇文章我们了解了二进制的基本原理(谈谈二进制(一))以及二进制的四则运算(谈谈二进制(二)),本篇我们一起来看看二进制的位运算.先来看一下有哪些位运算: 上表中列出了我们编程语言中的所 ...

  9. 什么叫取反_取反位什么意思_c语言按位取反什么意思

    PHP中使用按位取反(~)函数创建后门 - 微信公 580x300 - 60KB - PNG PHP中使用按位取反(~)函数创建后门 - 微信公 310x145 - 26KB - JPEG [东方新闻 ...

最新文章

  1. 通俗易懂。Cocos2dx和Unity3D概念,二者区别?哪个更好一点?
  2. c++ 显示图片_飞利浦256P1FR显示器一线直连MacBook使用体验分享
  3. 科研必备学士搜索引擎推荐
  4. 解决:Caused by: java.lang.UnsupportedOperationException: null
  5. scala-wordcount
  6. 13.追我的男生辣么多
  7. PostgreSQL pg_stats used to estimate top N freps values and explain rows
  8. 雷尼绍Renishaw wdf 文件解析(Python源码)软件分享
  9. 2010年翡翠岛露营
  10. 【xla】五.1、XlaCache命中规则
  11. 关于5G,四大运营商说......
  12. 你还记得当年上课天天玩 JAVA游戏吗
  13. mysql 审批表_用sql统计信贷业务审批表、逾期表(即期)
  14. 【2020-10-27】 scrapy爬虫之猎聘招聘信息爬取
  15. 淘宝新店没有流量怎么回事
  16. TinyXML 指南一
  17. oracle 报12560,UNIX系统中Oracle报TNS-12560错误的解决思路
  18. 数据库SDB数据缓冲层(TBL数据缓冲层)向ODB数据贴源层(QSL近源模型层)拉链算法脚本【SQL部分】
  19. Android 简易的自定义确认弹框AlertDialog
  20. 【51nod1327】棋盘游戏

热门文章

  1. onedrive php接口,Onedrive不用API,只用共享链接就能做成分享网盘
  2. mkvirtualenv: command not found 问题解决
  3. C#生成条形码图片的简单方法
  4. Python基础:break语句知识详解
  5. scipy笔记—scipy.misc.imresize用法(方便训练图像数据)
  6. js,javascript中判断一个数是否是素数
  7. JavaScript判断输入值是否为素数
  8. Linux gzip gunzip(压缩与解压缩)命令
  9. KL,JS,Wasserstein距离
  10. 词汇课程——导论(2)