javascript操作符"!~"详解


Posted in Javascript onFebruary 10, 2015

快过年放假了,也终于闲下来了。每天游览于各种技术文章中,这种状态好极了。

下午看篇关于js的文章,其中有如下这么一段引起了我的注意。

(function () {

    var names = [];

    return function (name) {

        addName(name);

    }

    function addName(name) {

        if (!~names.indexOf(name))//如果存在则不添加

            names.push(name);

        console.log(names);// ["linkFly"]

    }

}())('linkFly');

if (!~names.indexOf(name)) 中的操作符"!~" 什么意思,不理解,先从~入手。

测试可以得出结果值有这个的规律 -(X+1)

搜索一番,有的文章只丢一句:按二进制位取反

从字面意思,这里用八位二进制表示:3=00000011,那~3=11111100,套上面公式不对呀。
上面解释还是太过抽象不具体。其实这涉及到原码、反码、补码的知识。

原码
原码表示法最高位为符号位,该位为0表示正数,1表示负数。其余位表示数的绝对值。
反码
对于一个带符号的数来说,正数的反码与其原码相同;负数的反码为其原码除符号位以外的各位按位取反。反码常用来做求补码过程中的中间形式。
补码
正数的补码与其原码和反码相同;负数的补码是对它的原码除符号位以外各位取反,并在末位加1而得到,即为该数的补码加1。计算机内的数一般以补码形式表示。在补码中用(-128)D代替了(-0)D,注意:(-128)D没有相对应的原码和反码,(-128)D = (1000,0000)B。
求补运算
求补运算不考虑符号位,对它的原码各位取反,并在末位加1而得到。对一个数进行求补运算所得的是该数相反数的补码。

拿作者文章例子,理解下

~是按位取反的意思,取反就是如果是00111,则变为11000 (按位取反)

57的二进制表示为(1个字节):00111001
按位取反后(~57)的二进制: 11000110 此表示为十进制:-70
这是一个负数,是有符号的数,负数在计算机里要用其补码来表示:补码=符号位以后按位取反再加1.
所以-70(11000110)符号位以后按位取反后为(10111001) 再加1 则为(10111010)
换成十进制为:-58
因此~57=-58

至此算是终于搞明白了。虽然总结的公式能快速得出结果,但不能解释为什么,作为技术人我们喜欢钻研,深入细节。

感叹时间:

基础是一切上层的基石,潜心修道,路漫漫。

以上就是本文的全部内容了,希望大家能够有所得。

Javascript 相关文章推荐
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
Dec 09 Javascript
深入浅析JavaScript中的作用域和上下文
Mar 26 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
js实现div在页面拖动效果
May 04 Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 Javascript
Vue实现双向数据绑定
May 03 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
socket io与vue-cli的结合使用的示例代码
Nov 01 Javascript
jquery实现动态创建form并提交的方法示例
May 27 jQuery
js实现盒子移动动画效果
Aug 09 Javascript
JavaScript中的标签语句用法分析
Feb 10 #Javascript
jquery动态添加删除(tr/td)
Feb 09 #Javascript
javascript模拟map输出与去除重复项的方法
Feb 09 #Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 #Javascript
jquery动态改变div宽度和高度
Feb 09 #Javascript
angularJS结合canvas画图例子
Feb 09 #Javascript
jquery实现上下左右滑动的方法
Feb 09 #Javascript
You might like
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
Python实现微信好友的数据分析
2019/12/16 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书