常见位操作
-
|操作:将字符转换为小写或加空格,转为小写
('a' | ' ') = 'a'('A' | ' ') = 'a' -
&操作:将字符转为大写且加下划线,转为大写
('a' & '_') = 'A'('A' & '_') = 'A' -
^操作:将字符进行大小写切换,判断异号异或加空格,实现大小写切换
('a' ^ '_') = 'A'('A' ^ '_') = 'a'异或和0比较,判断是否为异号
((1^-1)<0);//true((1^1)<0);//false
n&(n-1)的运用
意义:可以去除二进制最后一个1
运用:
我们可以使用n = n&(n-1),这样就可以让n一直去掉最后那个1,直到全部去掉为止(n === 0)
var hammingWeight = function(n) {
// 我们可以利用n&n-1
// 每次都会消除最后一个1,知道没法消除为止
let count = 0
while(n !== 0){
n = n&(n-1)
count++
}
return count
};
记住:假如他是二的幂,那么在他的二进制中,一定只含有1的
var isPowerOfTwo = function(n) {
if(n<=0){
return false
}
//在二进制表示中,一定只含有一个1
return (n & (n - 1)) === 0
};
a^a = 0
异或是很重要的
异或可以进行大小写转换,进行判断同号问题
公式:
a ^ a = 0:本身和本身异或为0
a ^ 0 = a:和0异或变为变身
运用
我们可以使用这个来判断,因为异或是不区分先后顺序的,但是我们可以排序更改好的理解
var singleNumber = function(nums) {
// 判断,利用异或
// nums.sort((a,b)=>a-b)
// 异或这个操作,不分前后顺序
let refValue = 0
for(let value of nums){
refValue ^= value
}
return refValue
};
参考链接