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 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
jquery $.ajax()取xml数据的小问题解决方法
Nov 20 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 Javascript
JavaScript中使用Math.floor()方法对数字取整
Jun 15 Javascript
javascript如何实现暂停功能
Nov 06 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
AngularJS 指令的交互详解及实例代码
Sep 14 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
JSONP跨域请求
Mar 02 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 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 命令行参数详解及应用
2011/05/18 PHP
jQuery 操作XML入门
2008/12/25 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
python显示天气预报
2014/03/02 Python
使用Python脚本操作MongoDB的教程
2015/04/16 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
儿童学习python的一些小技巧
2018/05/27 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
python中使用while循环的实例
2019/08/05 Python
python同步windows和linux文件
2019/08/29 Python
python读取Excel表格文件的方法
2019/09/02 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
社区优秀志愿者材料
2014/02/02 职场文书
班长自荐书范文
2014/02/11 职场文书
会计员岗位职责
2014/03/15 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
村党支部书记承诺书
2014/05/29 职场文书
环境卫生标语
2014/06/09 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
人生遥控器观后感
2015/06/11 职场文书