写一个方法把0和1互转(0置1,1置0)
方法一:异或
异或运算符”∧”:相同取0 不同取1
它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。
即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。 可以简单理解为无进位相加
const convert = num => num^1;
convert(0); // 1
convert(1); // 0
方法二:二进制取反
1的二进制原码:0000 0001
~1 之后:1111 1110 (~就是按位取反)
以原码的角度看待 1111 1110 ,分析出它是负数(由于第一位是1,因此为负数)
这个负数要在计算机中存储,必须是补码,而原码转换补码规则:符号位不变,数值位取反加1
所以 1111 1110变成补码为:1000 0010
这样的补码代表:-2
~1; // -2
~-2; // 1
function interChange (num) {
return ~num+2
}
console.log('interChange',interChange(1)) // 0