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调试说明
Jun 07 Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
js中settimeout方法加参数的使用实例
Feb 27 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
vue webpack重写cookie路径的方法
Jul 10 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
OpenLayers3实现图层控件功能
Sep 25 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP下几种删除目录的方法总结
2007/08/19 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python标准库OS模块详解
2020/03/10 Python
Python加速程序运行的方法
2020/07/29 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
政府法律服务方案
2014/06/14 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
争先创优个人总结
2015/03/04 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
护士心得体会范文
2016/01/25 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫