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 相关文章推荐
jquery text(),val(),html()方法区别总结
Nov 04 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
基于javascript实现图片滑动效果
May 07 Javascript
正则表达式(语法篇推荐)
Jun 24 Javascript
javaScript如何跳出多重循环break、continue
Sep 01 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
Oct 20 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 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 - Html Transfer Code
2006/10/09 PHP
利用js调用后台php进行数据处理原码
2006/10/09 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
node.js发送邮件email的方法详解
2017/01/06 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
python交互式图形编程实例(二)
2017/11/17 Python
numpy中索引和切片详解
2017/12/15 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
python实现代码审查自动回复消息
2021/02/01 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
大学共青团员个人自我评价
2014/04/16 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
法定代表人身份证明书
2015/06/18 职场文书
Python使用pyecharts控件绘制图表
2022/06/05 Python