javascript中按位操作的应用,如何快速取整 判断字符串是否是包含某字符串
最近在看最基础的《javascript高级程序设计》看的灰常慢,看到按位运算这里,突然反思,这种鬼操作到底有什么实际的应用呢?
按位运算符有6个
&
按位与:a & b
|
按位或:a | b
^
按位异或:a^b
~
按位取非:~a
>>
右移: a>>2
<<
左移:a<<2
>>>
无符号右移:a >>> b
实际应用
求负数减1 反转操作
console.log(~true) //-2
console.log(~false) // -1
快速判断字符串中首付含有某个字符
if (~'mayufo'.indexOf('may')) {
console.log(true);
}
如果是-1 ~(-1) = 0
快速取整
console.log(~~30.79); //30
按位异或快速取整
console.log(30.79 | 0); //30
判断奇偶
console.log((32 | 0) & 1); //0为偶数,1为奇数
交换变量
var a = 1,
b = 2;
console.log(a, b);
a ^= b;
b ^= a;
a ^= b;
console.log(a, b);
快速进行幂计算
var c = 3; d = 2.45;e=16;
console.log(c<<3);//16 等于3*(2的3次方)
console.log(d>>0);//2(向右移0位,小数部分丢失,取整)
console.log(e>>3);//2 等于16/(2的3次方)
优化乘法和除法性能
加减计算只需要1个时钟周期
乘法需要10个时钟周期
除法需要30个时钟周期
所以乘法和除法在运行的速度上弱于加法减法。
但我们可以用位运算来对乘法和除法进行降维运算
参考
javascript中按位操作的应用,如何快速取整 判断字符串是否是包含某字符串的更多相关文章
- (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)
(原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...
- JavaScript随机数组(数组、随机、取整、取值的过程)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- js 快速取整
我们要将23.8转化成整数 有哪些方法呢 比如 Math.floor( ) 对数进行向下取整 它返回的是小于或等于函数参数,并且与之最接近的整数 Math.floor(5.1) 返回值 //5 M ...
- JavaScript中instanceof与typeof运算符的用法及区别详细解析
JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ...
- JavaScript中的字符串
JavaScript字符串是JavaScript最重要的部分,可能比任何其他的数据类型都更多的用到. 所有的JavaScript对象共享的方法之一就是toString(). 字符串对象叫做String ...
- JavaScript中对日期格式化的新想法.
其实我们对与日期的显示,也就那么几种,不需要每次都传格式化字符串. 只要告诉函数你想要什么结果就好了,以下是在ios的JavaScript中我新写的日期格式化函数: /** 格式化日期 @param ...
- javaScript中的indexOf使用方法
JavaScript中的indexOf使用方法 概述 indexOf大小写敏感,其中的O要大写 对于字符串而言 indexOf返回字符串第一次出现的位置,若没有出现返回-1 1 var str = & ...
- php中除法取整的方法(round,ceil,floor)
PHP中遇到需要将除法所得结果取整的情况时,就需要用到以下方法: 1. round:四舍五入 round() 函数对浮点数进行四舍五入. 语法:round(x, prec) 参数 描述 x 可选.规定 ...
- 快速入门上手JavaScript中的Promise
当我还是一个小白的时候,我翻了很多关于Promise介绍的文档,我一直没能理解所谓解决异步操作的痛点是什么意思 直到我翻了谷歌第一页的所有中文文档我才有所顿悟,其实从他的英文字面意思理解最为简单粗暴 ...
随机推荐
- JS:body元素对象的clientWidth、offsetWidth、scrollWidth、clientLeft、offsetLeft、scrollLeft
document.body.clientWidth 获取body元素对象的内容可视区域的宽度,即clientWidth=width+padding,不包括滚动条. document.body.clie ...
- Codeforces 626 C. Block Towers-二分 (8VC Venture Cup 2016-Elimination Round)
C. Block Towers time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- HDU 1180 诡异的楼梯【BFS/楼梯随时间变化】
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submis ...
- STL优先队列——踩坑日记
priority_queue 可以定义STL中的优先队列,但是优先队列在应用于自己定义的类型时需要重载<运算符,或者通过仿函数来定义比较方法,在定义比较方法的过程中,比较大的坑是STL中对于参数 ...
- 线段树+差分【p1438】无聊的数列
Description 维护一个数列{a[i]},支持两种操作: 1.1 L R K D:给出一个长度等于R-L+1的等差数列,首项为K,公差为D,并将它对应加到a[L]~a[R]的每一个数上.即:令 ...
- sshkey改变后出错的解决
错误态 ssh 192.168.111.200 出现如下错误 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING ...
- JDBC操作数据库的基本流程
所有的JDBC应用程序都具有下面的基本流程: 1.加载数据库驱动并建立到数据库的连接. 2.执行SQL语句. 3.处理结果. 4.从数据库断开连接释放资源. 下面我们就来仔细看一看每一个步骤: 其实按 ...
- [Atcoder Grand Contest 001] Tutorial
Link: AGC001 传送门 A: …… #include <bits/stdc++.h> using namespace std; ; ]; int main() { scanf(& ...
- Spark小问题合集
1)在win7下使用spark shell运行spark程序,通过以下形式读取文件时 sc.sequenceFile[Int,String]("./sparkF") 偶尔会出现“I ...
- Spark1.4安装问题
1)按照<大数据Spark企业级实战>第2章中的方法构建Spark集群,最后发现master可以正常启动,但是worker却都没有启动,原因是不能直接使用在slave模版文件 slaves ...