console.log(2 & 1)
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000001
console.log(3 & 1)
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000001
console.log(4 & 1)
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000001
只要是奇数最后一位一定是1,然后&1则为1 只要是欧式最为以为一定是0,然后&1则为0
console.log(~~ 6.83)
//先转化为整数
00000000 00000000 00000000 00000110
//取反
11111111 11111111 11111111 11111001
//内部补码(-1)
11111111 11111111 11111111 11111000
//取反
00000000 00000000 00000000 00000111
//值= -7
//-7以补码的形式存,即:
11111111 11111111 11111111 11111001再取反就是:
00000000 00000000 00000000 00000110
//最终得到6
console.log( 6.83>>0)
//先转化为整数
00000000 00000000 00000000 00000110
//右移零位置,补不到左边的,补空
//得到6
console.log(6.83 << 0) // 6
//先转化为整数
00000000 00000000 00000000 00000110
//左移零位置,补不到零,补空
console.log(6.83 | 0) // 6
先转化为整数
00000000 00000000 00000000 00000110
//与0按位或
00000000 00000000 00000000 00000000
//得到
00000000 00000000 00000000 00000110
var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
console.log(a) // 8
console.log(b) // 5
//a
00000000 00000000 00000000 00000101
//10
00000000 00000000 00000000 00001010
//5
00000000 00000000 00000000 00000101
10|5 =15
//总结
1.&运算符的特点遇0为0 ,用途:判断奇偶 偶数 & 1 = 0 奇数 & 1 = 1
2.|没什么特点 用途:~、>>、<<、>>>、|来取整:
3.^按位异或的3个特点:
1.) 0 ^ 0 = 0 , 0 ^ 1 = 1, 0异或任何数=任何数。
2.)1^任意正奇数,为两值相减(后者前去前者),1^任意正偶数,为两值相加。1^任意负偶数为两值相 加,1^任意负奇数为两值绝对值相加取反
3.)任何数异或自己 = 把自己置0。
4.<<左移n,放大2的n次方倍
5.>>有符号右移n(符号传播,右移留出的左空缺补之前未右移位的值,即保留符号),缩小2的n次方倍,保留符号
6.>>>无符号右移n(符号传播,右移流出的左空缺直接补0),缩小2的n次方倍
2.示例
//1^7
//1
00000000 00000000 00000000 00000001
//7
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00000110
//6
未完成:
3.使用^来完成值交换:
var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
console.log(a) // 8
console.log(b) // 5
4.使用&, >>, |来完成rgb值和16进制颜色值之间的转换:
/**
* 16进制颜色值转RGB
* @param {String} hex 16进制颜色字符串
* @return {String} RGB颜色字符串
*/
function hexToRGB(hex) {
var hexx = hex.replace('#', '0x')
var r = hexx >> 16
var g = hexx >> 8 & 0xff
var b = hexx & 0xff
return `rgb(${r}, ${g}, ${b})`
}
/**
* RGB颜色转16进制颜色
* @param {String} rgb RGB进制颜色字符串
* @return {String} 16进制颜色字符串
*/
function RGBToHex(rgb) {
var rgbArr = rgb.split(/[^\d]+/)
var color = rgbArr[1]<<16 | rgbArr[2]<<8 | rgbArr[3]
return '#'+ color.toString(16)
}
// -------------------------------------------------
hexToRGB('#ffffff') // 'rgb(255,255,255)'
RGBToHex('rgb(255,255,255)') // '#ffffff'
转自作者:奇瑞 链接:juejin.cn/post/692290… 来源:稀土掘金