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)
时间: 2024-08-28 11:19:34

javascript的位操作、整数、二进制的相关文章

【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 内存补码分析 #include<stdio.h> #include<stdlib.h> void main3() { //printf

交换一个整数二进制表示中的奇数位和偶数位

题目 原文: 写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现. (比如,第0位和第1位交换,第2位和第3位交换…) 解答 这道题目比较简单.分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可. 代码如下: int swap_bits(int x){ return ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555); } 当然也可以采用更自然的方式来写这段代码: int swap_bits1(

与整数二进制序列有关的编程题

1.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列 #include<stdio.h> int main() { inti,j,n,m; chara[32]={0}; printf("peleaseinput the number:"); scanf("%d",&n); for(m=0;m<32;m++) { i=(unsignedint)n%2; j=(unsignedint)n/2; n=j; a[m]=i; } pri

22.整数二进制表示中1的个数

http://zhedahht.blog.163.com/blog/static/2541117420073118945734/ 另外一种思路是如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减去1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有的0都会变成1.其余的所有位将不受到影响.举个例子:一个二进制数1100,从右边数起的第三位是处于最右边的一个1.减去1后,第三位变成0,它后面的两位0变成1,而前面的1保持不变,因此得到结果是1011. 我们发现减1的结果是

获取内存中整数二进制形式

采用移位和相与方式求整数在内存中的二进制形式. #include<stdio.h> typedef int DataType; int num_covert_binary(DataType num); void main() { DataType num; num = -1; num_covert_binary(num); num = 12; num_covert_binary(num); getchar();//让console 等待一下 } int num_covert_binary(Da

笔试算法题(14):整数二进制表示中的1 &amp; 判定栈的push和pop序列是否对应

出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位,k%2 ==0表示其是否是偶数,如果不是则说明当前二进制表示的最右边一位为1,当k==0成立的时候移位结束: 另外还可以使用'消1'的方法,如果二进制表示A为'****1000',则A-1为'****0111',也就是我们仅关注二进制表示最右边的第一个 1,这样的话A&(A-1)的结果就可以将最右边的

JavaScript实现大整数减法

继上一篇博文写了大整数加法之后,我又模拟上篇博文的算法,自己实现了大整数减法. 大整数减法相对于加法来说,稍微复杂一点.由于要考虑一些情况: 1. 两个数相减,可能会出现结果为正.负和0三种情况: 2. 会出现借位的情况,而且还要考虑最高位时有没有借位. 实现代码如下: function subString(a,b) { //将字符串a和b补全成同等长度 while (a.length < b.length){ a = '0' + a; } while (b.length < a.length

JavaScript中判断整数的方法

一.使用取余运算符判断 任何整数都会被1整除,即余数是0.利用这个规则来判断是否是整数. 1 2 3 4 5 function isInteger(obj) {     return obj%1 === 0 } isInteger(3) // true isInteger(3.3) // false 以上输出可以看出这个函数挺好用,但对于字符串和某些特殊值显得力不从心 1 2 3 4 isInteger('') // true isInteger('3') // true isInteger(t

143. 最大异或对(Trie树存整数+二进制)

在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N. 第二行输入N个整数A1A1-ANAN. 输出格式 输出一个整数表示答案. 数据范围 1≤N≤1051≤N≤105,0≤Ai<2310≤Ai<231 输入样例: 3 1 2 3 输出样例: 3 暴力做法:O(n^2) import java.util.Scanner; public class Main{ static int a[]=new int[1