js ~操作符(字位操作"非")详解
来源:互联网 发布:无人机网站源码 编辑:程序博客网 时间:2024/05/16 02:16
基本概念:
这是js中的一元操作符:按位取反。
计算规则为:
~x = -(x+1);
即:~-1 = 0
、~1 = -2
。
解释:
下面我将从计算机组成原理方面详细解释一下,在看懂下面表格之前要有一点基本知识:
- 计算机中的数字是以补码的形式表示的
- 正数的原码、反码、补码都一样,就是它本身
- 负数的反码符号位不变,其余取反;补码为反码加1
- +0的补码和-0一样(其实不一样,-0的进1被丢弃了)
- 取反的意思每位0变1、1变0
对于操作数-1:取反结果为0这个不用解释了吧。
对于操作数1:这个取反的结果不大好看,但是我不是告诉你了么,~x = -(x+1)
,我们计算一下啊:~1 = -(1+1) = -2,那我们看看-2的补码吧,如果补码就是11111111,11111111,11111111,11111110
那就对了,
-2的补码果然是11111111,11111111,11111111,11111110
,这就是-2啊,这就是它在计算机中的表现形式啊!
拓展:
可能大家了解了这个,还是不知道哪里可以用到,那我就提醒一句:在-(x+1)中唯一能得到0的x的值为-1。这就有点意思了吧?我举一个例子,其它的留给大家再挖掘挖掘。
首先,还是了解一个概念:
抽象渗漏:在代码中暴露底层的实现细节。
比如:indexOf()这个函数大家肯定不陌生了.
- 判断字符串“lo”是否在字符串“hello world”中可以这样写:
var a = "hello world";if(a.indexOf("lo")>=0) { //match}
也可以这样写:
var a = "hello world";if(a.indexOf("lo")!=-1) { //match}
- 判断字符串“ol”是否不在字符串“hello world”中可以这样写:
var a = "hello world";if(a.indexOf("ol")<0) { //not match}
或者:
var a = "hello world";if(a.indexOf("ol")==-1) { //not match}
上面四种代码就是抽象渗漏。像这些0啊、-1啊之类细节就应该屏蔽掉。
怎么办呢?用~操作符啊,只要取反不是0,说明就不是-1,就是真值啊!很简单,代码就不写了。
阅读全文
0 0
- js ~操作符(字位操作"非")详解
- js按位操作符 & | ^ ~
- JS中的位操作符:“与,或,非,异或,左移,右移”
- JS位操作运算
- C 位操作 详解
- JAVA 位操作详解
- c++位操作详解
- 位操作详解
- 位操作符号详解
- 位操作的详解
- 位运算操作详解
- 位运算操作符详解一
- 位运算操作符详解二
- JS操作Cookie详解
- JS操作Cookie详解
- js 操作cookie详解
- JS操作cookie详解
- js 数组操作详解
- Henry开博啦!
- tomact,servlet,JSTL
- 包装类
- 运维学习过程
- 树莓派入门--安装系统
- js ~操作符(字位操作"非")详解
- Hibernate核心点介绍:
- LeetCode 6. ZigZag Conversion
- USACO-Section1.2 Milking Cows [其他]
- libcurl基础教程及封装(支持同步异步请求,支持多线程下载,支持https)
- 廖雪峰的Git教程九-创建于合并分支
- jsp简介
- SimpleTrigger、CronTrigger、SchedulerListener、TriggerListener、JobListener区别
- 微信小程序开发之获取openid及用户信息