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函数般调用正则
Apr 08 Javascript
不懂JavaScript应该怎样学
Apr 16 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
Mar 10 Javascript
JavaScript 和 Java 的区别浅析
Jul 31 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
Apr 29 Javascript
JavaScript实现的一个倒计时的类
Mar 12 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
如何基于JavaScript判断图片是否加载完成
Dec 28 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
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
python 生成器需注意的小问题
2020/09/29 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
学前教育教师求职自荐信
2013/09/22 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
爱祖国演讲稿
2014/05/04 职场文书
大学生在校表现评语
2014/12/31 职场文书
大二学年个人总结
2015/03/03 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
Win11更新失败并提示0xc1900101
2022/04/19 数码科技