~ 按位取反运算解析
2018-01-28 14:39
232 查看
今天我在看简明Python指南的时候,看到其中一个计算机计算的问题,它是这样描述的:
x的按位取反结果为-(x+1)
~5 输出 -6。有关本例的更多细节可以参阅:http://stackoverflow.com/a/11810203
看到这儿我就疑惑了,之前在大学中学习的计算机基础课程又还给教材了,hhh…
无奈,我只好取网上搜寻解析的答案,而网上的解释说得不太让人明白,自己结合他人的解释进行了一番整理,把思路排版出来,供后来者参阅:
首先要明确的一点是,计算机内部在做数学运算时(也就是计算机的0和1的运算),都是以补码为标准的,说白了 计算机中就一种码那就是补码,而现实社会中的编码规则,例如原码、反码都是我们自定义的,为了和计算机中的补码形成转换关系。所以说在我们手工计算这类由计算机计算的01运算,要站在计算机的角度。因此首先就要将我们的原码反码什么的全都先转为补码,再来计算^_^。这样才能使得正数和负数的表示统一起来,具体可以参阅【补码的历史】,这里不过多展开了。
接着来看那个问题,从问题入手,解决了实际问题,概念也就自然了然于心了。^_^
5的补码是它本身(ps:正数的原、反、补码都是它本身;负数的原码最高为为1开头,反码是最高符号位不变,其余位在原码的基础上取反,补码是在反码的基础上+1即可得到)
5的补码:
注意这里的结果是用补码表示的,毕竟这还是机器表示形式,转化为自然语言的编码,把结果转化为原码就是:
补码-1转为反码:
反码再取反转为原码:
原码转为十进制,答案就是-6
按位取反的快捷运算公式
转载请注明出处:http://blog.csdn.net/coder__cs/article/details/79186677
本文出自【elon33的博客】
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),至于这个公式怎样推理出来的,这里不作介绍,有兴趣的可以上网冲浪查询。懂原理才能记得牢固,一个快捷计算公式只是为了计算时方便。
转载请注明出处:http://blog.csdn.net/coder__cs/article/details/79186677
本文出自【elon33的博客】
相关文章推荐
- 运算字符串解析(c语言)
- C指针解析 ------ 指针的算术运算
- javascript 二进制运算技巧解析
- 原码、反码、补码、取反运算~、以及单目运算符 -
- 数据结构复习:栈队列 优先级队列 已经使用栈来解析和运算数学表达式
- 文本四则运算解析工具与浮点数小数精度保留工具
- 位运算小结(按位与、按位或、按位异或、取反、左移、右移)
- 定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。
- 【OpenCV图像处理入门学习教程一】OpenCV2 + 3的安装教程与VS2013的开发环境配置 + JPEG压缩源码分析与取反运算修改
- <2012 12 15> ABI/EABI/OABI详解及ARM-linux 浮点运算解析与配置
- C++实现对数学基本运算表达式的解析
- NKU两题简单题解析(递归分析与位运算技巧)
- 大数据IMF传奇行动 Spark pi 例子计算 解析 百万次的运算
- 计算机中的补码与java取反运算
- 解析取模运算% 和位与运算& 之间的关系详解
- C# 取反运算
- 自增自减运算的原理解析
- C++实现对数学基本运算表达式的解析
- 【原创】Delphi实现数学表达式的计算(逆波兰式法)-四则运算解析
- Single Number II位运算解析