在JavaScript中的位操作代码中遇到无限循环

时间:2019-04-21 13:18:31

标签: javascript

  • 我正在尝试使用javascript解决位操作问题
  • 在问题中,给定输入的十进制数,将其转换为二进制数,然后根据两个条件操纵位以在所有位置产生0位
  • 第一个条件是,每第i次迭代LSB位都被翻转,并且如果从i + 1到位置末尾的位为零,则在第i个位置的位值将被翻转
  • 在每次位操作中,计数器值都会递增,并输出返回显示二进制数发生位操作的计数器值
  • 在我的代码中,我将十进制转换为二进制数并写出了用于位操作的条件,但是代码遇到了无限循环并且没有结束
  • 你们能让我知道我在哪里犯错了,并根据您的建议帮助我解决问题
  • 提供以下代码:

var decimalNumber = 77;
var binaryBit = solution(decimalNumber);
console.log(binaryBit);
function solution (decimalNumber){
	var binary=[], i=0, j=0, binary_operations=0, binary_modified=[];
  while(decimalNumber > 0){
  	binary[i] = (decimalNumber%2);
    decimalNumber = Math.floor(decimalNumber/2);
    i++;
  }
  console.log(binary);
  binary = binary.reverse();
  console.log(binary);
  while(!binary.every(zeroCheck)){
  	//comBinaryOperation(binary);
  //}
  //function comBinaryOperation(binary){
  //for(var j=0; j<binary.length; j++){
  	binary[binary.length-1] = (binary[binary.length-1] == 1) ? 0 : 1;
    binary_modified = binary.slice(j+1, binary.length);
    console.log(binary_modified);
    if(binary_modified.every(zeroCheck)){
    	binary[j] = (binary[j] == 1) ? 0 : 1;
    }
    binary_operations++;j++;
    if(j == binary.length-1){j=0;}
    /*while (binary.every(zeroCheck)){
    	break;
    }*/
  }
  //}
  /*if(binary.includes(1,-4) ){
  	binary_bit = 1;
  }*/
  console.log(binary);
  return binary_operations;
}
function zeroCheck(element){
	return element == 0;
}

1 个答案:

答案 0 :(得分:0)

因为此while(!binary.every(zeroCheck))为真,所以您的代码将进入无限循环。无限循环主要发生在while循环while(true)进入无限循环的时候。
请尝试将此行!binary.every(zeroCheck)更改为binary.every(zeroCheck),因为binary.every(zeroCheck)返回false。