js位操作
1.&(与)
都是1才是1
例如:14&15 (14 二进制 1110
15 二进制 1111
&与的结果 1110 ----》结果14)
(14&15).toString(2); //"1110"
2.|(或)
有一个是1就是1
例如:14|15 (14 二进制 1110
15 二进制 1111
|与的结果 1111 ----》结果15)
(14|15).toString(2); //"1111"
3.^(异或)
不同就是1
例如:14^15 (14 二进制 1110
15 二进制 1111
^与的结果 0001 ----》结果1)
(14^15).toString(2); //"1"
4.~(非)
说到这里就要科普一下了,JavaScript仅支持32位整型数
0变1,1变0
例如:~14(14 二进制 0000 0000 0000 0000 0000 0000 0000 1110
~的结果 1111 1111 1111 1111 1111 1111 1111 0001
最高位符号位为1,说明是个负数,大计基还记得嘛~~负数怎么来的
(正数二进制,取反,+1(为什么这样呢?因为计算机不擅长减法,所以把负数处理成补数,使得相减就等于他们的补数相加;而一个数的正负数取反相加是11111111...再+1才等于0,所以要+1))
逆过程,-1,取反
1111 1111 1111 1111 1111 1111 1111 0001 --> 0000 0000 0000 0000 0000 0000 0000 1111
----》15 ----》当然因为是个负数,最终结果是-15)
~14; //-15
5.<<(有符号左移)
有符号左移会将32位二进制数的所有位向左移动指定位数
num<<n相当于num乘以2的次方
var num = 5; // 二进制111
num << 3; // 二进制111000,十进制40
6.>>(有符号右移)
num>>n相当于num除以2的次方
(64).toString(2) //"1000000"
(64>>3).toString(2) //"1000",十进制8
有符号左移与右移不会影响符号位。
7.>>>(无符号右移)
var num = -64; //
(num >>> 5).toString(2); //"111111111111111111111111110",十进制134217726
ps:>> << ~有时候会用来取整
一般我们取整会用以下这些方式其中一种:
parseInt(1.5) //
Math.round(1.5) //
Math.floor(1.5) //
Math.ceil(1.5) //
但是有时候我们想追求更高的性能,我们会考虑用位运算来取整:
1.5>>0 //
1.5<<0 //
~~1.5 //
参与 位运算 的操作数都会先对其进行抽象的 ToInt32 操作,上面3种操作都没有实质对数字进行什么位运算,只是利用了它先对数字进行ToInt32操作的特性(因为ToInt32操作js没有提供方法接口)
js位操作的更多相关文章
- JS中的位操作在实际项目中的应用
前言: Linux中的文件管理子系统的权限管理,想必大家都知道:rwx分别代表read(可读),write(可写), execute(可执行,如果是可执行程序的话),其中rxw可以按照数字表示: r ...
- node.js下使用RSA加密事例(windows)
1.安装openss 直接下载window下的安装包 http://houjixin.blog.163.com/blog/static/3562841020144143494875/ 以我发博文现在的 ...
- js高级程序设计(三)基本概念
数据类型 ECMAscript中有五种简单数据类型Undefined,Null,Boolean,Number,String 还有一种复杂数据类型Object. typeof操作符 typeof可能返回 ...
- js的基本概念详解
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(三) 如果你刚学js,想快速了解到js的基本概念,以下将会是一篇不错的引导文章: 语法 ...
- APNs功能之Node.js和Mysql应用总结
APNs功能之Node.js和Mysql应用总结 这篇文档主要是总结Node.js和Mysql的学习心得体会.当然也可以看作是此前所写的消息推送服务的续篇. 简单描述下应用背景,我们的应用需要实现苹果 ...
- JS学习之路,菜鸟总结的注意事项及错误更正
JavaScript 是一种面向对象的动态语言,它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适 用于 JavaScript.需要注意的一个主要区别是 JavaScript 不支持 ...
- 【js实例】js中的5种基本数据类型和9种操作符
js中的5中基本数据类型 js标识符 第一个字符必须为字母,下划线,或美元符 其他字符可以是字母,下划线,美元符,数字 js标识符区分大小写 标识符不能使关键字和保留字 关键字: break do i ...
- node.js 下载安装及gitbook环境安装、搭建
最近需要gitbook看文档,于是各种百度,各种安装,很多都是无法正常安装完成的,比较纠结啊 最后,终于发现一个好用的,现分享一下地址(也是给自己做个记录): 1.node.js下载地址: http: ...
- 五种js判断是否为整数(转)
五种js判断是否为整数类型方式 作者:snandy 这篇文章主要介绍了五种JavaScript判断是否为整数类型方式,需要的朋友可以参考下 这篇看看如何判断为整数类型(Integer),JavaS ...
随机推荐
- 《Linux内核设计与分析》第四章读书笔记
<内核设计与实现>第四章读书笔记 第四章:进程调度 进程(操作系统)程序的运行态表现形式. 进程调度程序,它是确保进程能有效工作的一个内核子系统. 调度程序负责决定将哪个进程投入运行,何时 ...
- 第三个Sprint ------第六天
分数计算界面代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a ...
- h5定位geolaction无法调试解决方法
昨天接到一个在h5获取经纬度的需求,看了文档后,代码其实很简单,但在浏览器上调试就比较蛋疼了... 代码: function successfulCallback(position) { consol ...
- 伪静态与重定向--RewriteBase
RewriteBase用于设置目录级重写的基准URL,即所有的重定向都是基于这个URL.内部重定向可能看不出效果,但是在外部重定向(使用R flag后),如果不手动指定 / 为根目录,那么就会去整个磁 ...
- Building Java Projects with Gradle
https://spring.io/guides/gs/gradle/ Gradle学习系列教程 https://blog.csdn.net/column/details/gradle-transla ...
- Win10 1803 Spring Creators update Consumer edition的版本记录
安装时可选择的版本列表 安装完之后的版本: 3. 时间线更新 4. Focus assistant
- Linux查看版本
最简单的命令 lsb_release -a 查看机器名 hostname 查看内核版本 uname -r 红帽 centos 查看版本 cat /etc/redhat-release ubuntu 查 ...
- Python文件os模块
一.文件操作 1.打开一个文件 fo = open("foo.txt", "wb") fo.write( "www.runoob.com!\nVery ...
- Qt__事件处理机制
一.Qt事件 Qt会将系统消息(如鼠标按键.键盘按键等)转化为Qt事件,Qt事件被封装为对象且定义该对象的类均继承自抽象类QEvent. 二.Qt事件的产生 1.操作系统产生 Spontaneous ...
- webstrom 安装Babel
https://www.jianshu.com/p/b9bd2ec9ec80 https://www.cnblogs.com/zhishaofei/p/6061568.html https://blo ...