(按位取反)运算的理解:

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

例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:

5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101

执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6

以上过程没有任何问题,但我们如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能我们会以为它应该表示-10等等,所以,理解~按位取反的另一个关键就是理解1111 1111 1111 1111 1111 1111 1111 1010为什么表示-6,也即理解负数的二进制表达方式。

现在计算机普遍使用补码表示负数。知道一个数的补码,要求其值的方法是:首先看符号位也就是最左的一位,如果是1代表是负数(-)如果是0代码是正数(+),然后对该值取反再+1,得到其源码。

例如本例中得到的 1111 1111 1111 1111 1111 1111 1111 1010,其符号位(最左一位)是1,表明它表示的是负数,欲求其源码,需先对其取反,然后再加1:0000 0000 0000 0000 0000 0000 0000 0101 + 1 = 0000 0000 0000 0000 0000 0000 0000 0110,然后在得到的源码前加一个负号,即-0000 0000 0000 0000 0000 0000 0000 0110 = -6。以上便是对~按位取反运算以及负数的二进制表示的理解,不难发现,在求源码的时候,要将补码进行取反后再加1,然而这个补码原本就是之前由~运算时,对原来的操作数通过~按位取反而得来的,所以,此时在求该补码的源码时的取反操作,相当于将补码变回了原来的那个操作数,之后进行的加1操作就相当于对原来的操作数进行加1,只不过结果变成了他的相反数。

因此,可以总结出~按位取反的计算结论是:~n = -(n+1)

例如本例中,~5 = -(5+1),即~5 = -6
--------------------- 
出處

js取整
~是按位取反运算,~~是取反两次
在这里~~的作用是去掉小数部分
因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数
除了~~n 还可以用
n<<0
n>>0
n|0

(按位取反)运算的理解相关推荐

  1. java逻辑移位和算术移位,关于对移位运算的理解

    标签: 之前在<计算机组成原理>这门课中学习了很多,其中包括二进制数的移位运算.当时并不理解他们用来作甚,迷迷糊糊的状态,学了都不知道为什么要学.什么东西总是到了需要用到的时候,才明白,哦 ...

  2. 对位运算 负数位运算的理解

    对位运算 负数位运算的理解 位运算大法好- 在这里,我拿洛谷P2104的题当作例题 题目: 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运 ...

  3. ~ 按位取反运算解析

    今天我在看简明Python指南的时候,看到其中一个计算机计算的问题,它是这样描述的: x的按位取反结果为-(x+1) ~5 输出 -6.有关本例的更多细节可以参阅:http://stackoverfl ...

  4. 对于整数取反(取负NEG)运算的理解

    对于整数取反(取负)运算的理解 对于<计算机系统基础>中对于取负[NEG]运算还不是很理解,于是查了部分的论文 引文 引文:博主AlwaysSimple的文章:https://blog.c ...

  5. 和丨c语言运算符号理解(单片机学习)

    &和丨c语言运算符号理解(单片机学习) a&0x80 a丨0x80 丨是按位或运算 & 是按位与运算 ox表示十六进制数 关于按位与运算,先要将其他的进制数转化为二进制数, 然 ...

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

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

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

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

  8. 取模运算的理解和应用

    软件开发过程中,总会遇到取余,取模,取整的计算或者思想,这里小结一下. 取模和取余,这两个运算在真整数的时候是一个概论,在负整数进行除法运算时不同.符号:" % ". 取整:即求商 ...

  9. 数据库系统概论—除运算的理解

    之前学数据库都只是感觉单纯在学习Sql而已,而sql语法又符合英语的语法,所以并没有觉的难学,直到翻开教材的那一次,各种概念术语搞得我甚是头疼. 闲话少说!众所周知,除运算是整个代数运算中最难理解的运 ...

最新文章

  1. php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)
  2. Linux-diff和diff3命令
  3. BP神经网络 PID控制simulink仿真
  4. sql server数据库课程设计分析
  5. 通过Resource file本地化SharePoint用户界面
  6. Captain Flint and a Long Voyage
  7. 自己的作品界面---类似360杀毒软件的界面
  8. c# 时间戳的使用,日期判定(时间戳获取、 时间戳和DateTime的转换、时差计算)
  9. Spring Boot 网易云课堂
  10. 电影院里电影票和座位号的关系
  11. 【漏洞修复】SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
  12. 集成VueCli5各种功能与插件(一)安装
  13. 力扣算法之两矩形求和
  14. linux系统如何安装mtk驱动程序,模块编译问题 给MTK芯片的wifi网卡编译linux驱动 系统是mint...
  15. 打印机显示域服务器,操作打印机提示“active directory域服务当前不可用”怎么办?...
  16. 肉鸡的俘虏!一个菜鸟******的自白
  17. I2C读写EEPROM
  18. 基于PaddleGAN项目人脸表情动作迁移学习(三)人脸融合
  19. 二中高考2021成绩查询南阳二中,扩散!南阳市高三二模成绩发布!
  20. 常用GIS行业技术架构总结-技术运维产品

热门文章

  1. MyEclipse中maven项目中WEBROOT目录问题
  2. java-php-python-科技专业师生沟通平台计算机毕业设计
  3. 阿里云服务器如何购买?三种购买方式图文教程
  4. 合工大计算机录取分数,合肥工业大学适合“捡漏”的专业,录取分数最低
  5. 解决Truffle搭建项目环境时候出现ExtendableError: Could not find suitable configuration file.
  6. scipy更新后imread,imresize函数被启用,替换方案
  7. Python+pywin32批量读取带密码的Excel文件数据导出为CSV文件
  8. python组件有多少个_python-计算,排序和重新排列组件
  9. 机器学习中的数学——距离定义(二十):相对熵(Relative Entropy)/KL散度(Kullback-Leibler Divergence)
  10. 对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序