Javascript 求补数的有效解

Javascript 求补数的有效解,javascript,algorithm,Javascript,Algorithm,我得到了一个正整数,并要求输出它的补码 i、 e 说明: 5的二进制表示为101(无前导零位),其补码为010。所以我需要输出2 下面的解决方案有效,但我觉得它不是最有效的算法。有人能找出任何可以改进的方法吗?最有可能使用位运算符 /** *@param{number}num *@return{number} */ var findComplement=函数(num){ var bin=编号(num).toString(2); 仓位=仓位分割(“”); var-answer=[]; 对于(变量

我得到了一个正整数,并要求输出它的补码

i、 e

说明:

5
的二进制表示为
101
(无前导零位),其补码为
010
。所以我需要输出
2

下面的解决方案有效,但我觉得它不是最有效的算法。有人能找出任何可以改进的方法吗?最有可能使用位运算符

/**
*@param{number}num
*@return{number}
*/
var findComplement=函数(num){
var bin=编号(num).toString(2);
仓位=仓位分割(“”);
var-answer=[];
对于(变量i=0;i控制台日志(FindCompletion(5))这可能不会更快,但它是一个单行程序:

const complement = (n) => n.toString(2).split('').map((e) => e === '0' ? 1 : 0).join('', 2)

这可能不会更快,但它是一条直线:

const complement = (n) => n.toString(2).split('').map((e) => e === '0' ? 1 : 0).join('', 2)

检查功能
补码

它是如何工作的? 首先,我们使用补码运算符
~
,但它返回一个32位的结果,因此对于
~5
,它等于
4294967290
(29
1
010
共32位)。接下来我们需要去掉前面的
1
,因此我们以二进制格式创建一个与数字长度相同的掩码,即
5
101
)掩码是
111
,即
7
。使用
&
运算符作为补码和数字,我们得到正确的结果

希望这是清楚的:)

代码 您还可以运行代码段来测试它
函数补码(n){
变量掩码=数学功率(2,n.toString(2).长度)-1;
return~n&mask;
}
输入

结果:2
检查功能
补体

它是如何工作的? 首先,我们使用补码运算符
~
,但它返回一个32位的结果,因此对于
~5
,它等于
4294967290
(29
1
010
共32位)。接下来我们需要去掉前面的
1
,因此我们以二进制格式创建一个与数字长度相同的掩码,即
5
101
)掩码是
111
,即
7
。使用
&
运算符作为补码和数字,我们得到正确的结果

希望这是清楚的:)

代码 您还可以运行代码段来测试它
函数补码(n){
变量掩码=数学功率(2,n.toString(2).长度)-1;
return~n&mask;
}
输入

结果:2
如果我没弄错,代码应该与此接近:

var findComplement=函数(num){
/*跳过前导零*/
无功功率;

对于(power=31;power>=0&&((num&)(1),如果我没有弄错,代码应该接近于此:

var findComplement=函数(num){
/*跳过前导零*/
无功功率;

对于(power=31;power>=0&&((num&)(1)来说,这是JavaScript中的另一种方法

const findComplement = (num) => {
  return parseInt(
    num
      .toString(2)
      .split('')
      .map((i) => +!+i)
      .join(''),
    2
  );
};

另一种使用JavaScript的方法

const findComplement = (num) => {
  return parseInt(
    num
      .toString(2)
      .split('')
      .map((i) => +!+i)
      .join(''),
    2
  );
};

数字补码的位技巧

var findComplement=(num)=>{
常量掩码=parseInt(+num).toString(2).replace(/\d/g,'1'),2);
返回num^掩码;
};

log(findComplement(5));
数字补码的位技巧

var findComplement=(num)=>{
常量掩码=parseInt(+num).toString(2).replace(/\d/g,'1'),2);
返回num^掩码;
};

控制台日志(FindCompletion(5))
@Pat你是对的,这可能不是回答这个问题的正确场所,抱歉!@Pat你是对的,这可能不是回答这个问题的正确场所,抱歉!或
返回掩码-n
返回掩码-n
那里的
+!+
是什么意思?那里的
+!+
是什么意思?