博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
~ 按位取反
阅读量:5308 次
发布时间:2019-06-14

本文共 706 字,大约阅读时间需要 2 分钟。

时间能淡忘一切,只要时间够久,即使是曾经最深刻的记忆。

按位取反,涉及到补码等计算机知识,大学时学过,现在提起原码、反码、补码,依稀有点影响,但具体的已淡忘的不留一丝痕迹。借助网络的力量,再次来记忆一遍。

在 js 中是通过 ~ 符号进行按位取反操作的。具体的规则如下:

  • 原码:10进制变2进制,8位,并标明符号位。0正数,1负数,最左一位为最高位。
  • 反码:按位取反
  • 补码:除符号位不变,其他位取反
  • 补码修复:最高位为正,末尾 -1 修复;最高位为负,末尾 +1 修复
  • 转换:2进制变10进制

补充:为什么要有补码及补码修正?因为计算机中减法是通过加一个负数处理的,而负数又是通过补码保存的。目的就是为了统一加法减法。原码:

举例:

~9 结果:-10

原码:00001001
反码:11110110
补码:10001001
修正:10001010 1是负,加1修正
转换:-0008020 -> 10

~-9 结果:8

原码:10001001
反码:01110110
补码:00001001
修正:00001000 0是正,减1修正
转换:+0008000 -> 8

在 js 中运用:位运算的效率高于符号运算

let str = 'wwr23';if (str.indexOf('2') > -1)) {// 存在 }// 优化替换,原理 ~-1 // 0    ~0 // -1   ~1//-2   ~2//-3  只要不为0都为trueif (~str.indexOf('2'))) {// 存在}

转载于:https://www.cnblogs.com/EnSnail/p/10495039.html

你可能感兴趣的文章
Maven------使用maven新建web项目出现问题 项目名称出现红色交叉
查看>>
基础学习:C#中float的取值范围和精度
查看>>
Akka-Cluster(3)- ClusterClient, 集群客户端
查看>>
java中基本数据类型和包装类的区别
查看>>
项目指南
查看>>
康托展开
查看>>
MongoDB-CRUD
查看>>
ASM字节码增强技术
查看>>
javaagent 简介
查看>>
C++学习之智能指针
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
Reflection in Teaching
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>