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)

 

posted @ 2015-07-16 16:30  eyeear  阅读(760)  评论(0编辑  收藏  举报