Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取整数的二进制表示形式_Javascript_Node.js_Binary_Bit Manipulation_Bitwise Operators - Fatal编程技术网

Javascript 获取整数的二进制表示形式

Javascript 获取整数的二进制表示形式,javascript,node.js,binary,bit-manipulation,bitwise-operators,Javascript,Node.js,Binary,Bit Manipulation,Bitwise Operators,我刚刚有个面试问题,我需要得到一个整数的二进制表示,这是我应该知道怎么做的。。例如,5在二进制中表示为101,步骤如下所示: // 5 % 2 = 1 // 5 / 2 = 2 // result = 1; // 2 % 2 = 0 // 2 / 2 = 1 // result = 10 // 1 % 2 = 1 // 1 / 2 = 0 // result = 101 停止条件是当~~(1/2)==0 所以我有这个: const getBinary = (v) => { le

我刚刚有个面试问题,我需要得到一个整数的二进制表示,这是我应该知道怎么做的。。例如,5在二进制中表示为101,步骤如下所示:

// 5 % 2 = 1
// 5 / 2 = 2
// result = 1;

// 2 % 2 = 0
// 2 / 2 = 1
// result = 10

// 1 % 2 = 1
// 1 / 2 = 0
// result = 101
停止条件是当
~~(1/2)==0

所以我有这个:

const getBinary = (v) => {

  let remainder, binary = 1;

  while (true) {

    remainder = v % 2;
    v = ~~(v / 2);

    if (v === 0) {
      return binary;
    }

    if (remainder === 0) {
      binary = binary * 10 + 1;
    }
    else {
      binary = binary * 10;
    }
  }

};

console.log(getBinary(5));
这样可以工作,但是
二进制
变量被初始化为1。有没有办法改进它,使它可以处理负数,或者如果将0作为参数传递给函数

var integer = 52;
console.log(integer.toString(2));

javascript自带的简单函数,无需冗长的代码。

如果您想从头开始编写,可以使用以下内容:

函数到二进制(n){
n=数量(n);
如果(n==0)返回“0”;
var r='';
而(n!=0){
r=((n&1)‘1’:‘0’)+r;
n=n>>>1;
}
返回r;
}
控制台日志(toBinary(5));
控制台日志(toBinary(10));
console.log(toBinary(-5));

console.log(toBinary(0))所以这里有一种方法。它有一个处理基本情况的内部函数和一个扩展到特殊情况的外部函数。我更喜欢做字符串表示

const getBinary=v=>{
如果(v==0)返回“”;
设余数=v%2;
设商=(v-余数)/2;
如果(余数==0){
返回getBinary(商)+“0”;
}
否则{
返回getBinary(商)+'1';
}
}
常量betterGetBinary=v=>{
如果(v==0)返回“0”;
如果(v<0)返回'-'+getBinary(-v);
返回getBinary(v);
}

log(betterGetBinary(-10))一个快速而肮脏的解决方案,尽管它“可能”有两个缺陷:
-
Math.floor()

-无位运算符

让getBinary=number=>{
完成=错误;
设resultInverted=[];
设acc=数字;
而(!完成){
让提醒=acc%2;
如果(acc==1){
完成=正确;
}
acc=数学楼层(acc/2);
结果转换。推送(提醒);
}
返回编号(resultInverted.reverse().join(“”));
};
log(getBinary的类型(2));
log(getBinary(5));

log(getBinary(127))这不太正确。对于10,它返回1101yep也许是这样,寻找正确的东西应该是负数,或者只是二进制表示前面的一个
-
符号?使用移位运算符
>
是一种欺骗,但仍然是一个很好的答案+1.可能值得指出的是,如果你想扭转这种局面,你需要将其转换为Int32,因为JS中的按位运算限制为32位。感谢@ibrahim mahrir的编辑。它的格式更好,逻辑更直接。对于你上面的评论,我假设在普通人面前只需签名,但问题可能不是这样。这个版本还有一个额外的优点,就是能够处理大于32位的数字。。并且与
toString(2)
的工作方式更兼容。不客气!你真的应该考虑阅读,里面有很多很棒的东西。顺便说一句,答案很好,我还在等待OP的回复,看看这是否真的是他想要的您可以使用
while(true)
,然后在
if(acc==1)
中将return语句放在那里