javascript的位操作、整数、二进制
位与(x&y):对操作数进行二进制与的操作,如果两个操作数的某一位两个都为1,将对应的结果位设为1。
0x0007 & 0x0003 = 0x0003
\
一个小型年老棕色的狗:64 + 16 + 8 + 2 = 90
搜索一个有特定标记的宠物,只需要和搜索值进行位与操作。
//搜索大型 年轻 白色的宠物
var searchFlags = 128 + 32 + 4;
var pets = []; //宠物
var numPets = pets.length;
for(var i = 0; i < numPets; i++){
if(searchFlags & pets[i].flags === searchFlags){ }
}
位或(x|y):对操作数进行二进制或的操作,如果两个操作数的某一位只要有一个为1,将对应的结果位设为1。
0x0007 | 0x0003 = 0x0007
位异或(x^y):对操作数进行二进制异或的操作,如果两个操作数的某一位只有一个为1,将对应的结果位设为1。
0x0001 ^ 0x0000 = 0x0001 0x0001 ^ 0x0001 = 0x0000
//toggle在0和1之间转换(假设开始toggle等于0或者1)
toggle ^= 1;
toggle = toggle ? 0 : 1;
位非(~x):对所有位进行取反(如果操作数是有符号整数(最左位为符号位),则~操作符等于取负减1)。
11100111 取反为 00011000
位左移(x<<numBits):对x的二进制向左移numBits位。所有位向左移,最左位丢失,0填补最右的位。等价于无符号整数的乘法 x*(2^numBits)
y = 5 << 1; // y=10; => Math.floor(5*(2^1))
y = 5 << 2; // y=20; => Math.floor(5*(2^2))
y = 5 << 3; // y=40; => Math.floor(5*(2^3))
算术位左移(x>>numBits):对x的二进制向右移numBits位。除了最左符号位,所有位向右移,最右位丢失。等价于有符号整数的除法 x/(2^numBits)
y = 5 >> 1; // y=5; => Math.floor(5/(2^1))
y = 5 >> 2; // y=2; => Math.floor(5/(2^2))
y = 5 >> 3; // y=1; => Math.floor(5/(2^3)) x = y >> 0; //是一个快速的 x = Math.floor(y)
javascript的位操作、整数、二进制的更多相关文章
- JavaScript类型化数组(二进制数组)
0.前言 对于前端程序员来说,平时很少和二进制数据打交道,所以基本上用不到ArrayBuffer,大家对它很陌生,但是在使用WebGL的时候,ArrayBuffer无处不在.浏览器通过WebGL和显卡 ...
- [JavaScript]为JS处理二进制数据提供可能性的WEB API
写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那 ...
- JavaScript 里面的整数 位 操作
JavaScript 整数位操作. 与 操作符 & val num1 = 10; val num2 = 11; val num3 = num1 & num2; // num3 == 1 ...
- 在Python中,如何用一行代码去判定整数二进制中的连续 1
利用字节位操作如何判断一个整数的二进制是否含有至少两个连续的1 的方法有多种,大家第一反应应该想到的是以下的第一种方法. 方法一:从头到尾遍历一遍每一位即可找出是否有连续的1存在 这个方法是最普遍的. ...
- 22.整数二进制表示中1的个数[Get1BitCount]
[题目] 输入一个整数,求该整数的二进制表达中有多少个1.例如输入10,由于其二进制表示为1010,有两个1,因此输出2. [分析] 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数 ...
- 《剑指offer》-统计整数二进制表示中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...
- JavaScript实现大整数减法
继上一篇博文写了大整数加法之后,我又模拟上篇博文的算法,自己实现了大整数减法. 大整数减法相对于加法来说,稍微复杂一点.由于要考虑一些情况: 1. 两个数相减,可能会出现结果为正.负和0三种情况: 2 ...
- Javascript实现大整数加法
记得之前面试还被问到过用两个字符串实现两个大整数相加,当时还特别好奇好好的整数相加,为什么要用字符串去执行.哈哈,感觉当时自己还是很无知的,面试官肯定特别的无奈.今天在刷算法的时候,无意中看到了为什么 ...
随机推荐
- IE8,IE9,IE10,FireFox 的CSS HACK
#employeesView { top: 732px; //所有浏览器 top: 730px\9;//所有IE浏览器 } @media all and (min-width:0) { #employ ...
- android中file的使用实例
File是android的4种存储方式的一种.File就是文件的意思一个文件,你无非是想进行读写操作.所以这就用到两个流.一个数输入流,一个是输出流.FileOutstream,和FileInputS ...
- android中更改spinner、AutoCompleteTextView切割线的颜色
话说去除切割线的方法找了非常久也没找到,最终发现了更改切割线的方法 spinner和AutoCompleteTextView提示列表中间有一条黑色的切割线.想要改变它的颜色值,就要重写style. 1 ...
- SQL SERVER中的流程控制语句
流程控制语句 是指用来控制程序运行和流程分至点额命令.一般指的是逻辑计算部分的控制. 1.Begin End语句 封装了多个T-SQL语句组合,将他们组成一个单元来处理. 一般在条件查询或者循环等控制 ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- poj3237(树链剖分)
题目链接:http://poj.org/problem?id=3237 题目大意:指定一颗树上有3个操作: 1)询问操作,询问a点和b点之间的路径上最长的那条边的长度(即最大值): 2)取反操作,将a ...
- 解压system.img
解压: All-Series:~$ simg2img system.img system.img.ext4 All-Series:~$ mkdir tmp All-Series:~$ mount -t ...
- Android该HTTP下载
今天学习了Android开发中比較难的一个环节,就是断点续传下载,非常多人看到这个标题就感觉头大.的确,假设没有良好的逻辑思维,这块的确非常难搞明确.以下我就将自己学到的知识和一些见解写下供那些在这个 ...
- ecshop购物流程中去掉email邮箱
首先打开includes\lib_order.php,在第1688行左右找到并删除 !empty($consignee['email']) && 接着打开js\shopping_flo ...
- ecshop2.7.3怎么自动清除缓存
1.在ecs_shop_config表中插入一条数据 进入ECSHOP后台-数据库管理-SQL查询 复制下面SQL,粘贴到里面执行.注意这时是默认表前缀ecs_,如果你的修改过要和你的统一了. INS ...