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 相关文章推荐
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
jquery+css3打造一款ajax分页插件(自写)
Jun 18 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
Jun 26 Javascript
JS中prototype的用法实例分析
Mar 19 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
js变量提升深入理解
Sep 16 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 Javascript
微信小程序实现单个或多个倒计时功能
Nov 01 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
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php常用数学函数汇总
2014/11/21 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
FCK调用方法..
2006/12/21 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python从子线程中获得返回值的方法
2019/01/30 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
2015年党员自我剖析材料
2014/12/17 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
观后感开头
2015/06/19 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
深入理解pytorch库的dockerfile
2022/06/10 Python