본문 바로가기

개발/JavaScript

[자바스크립트] 10진수에서 2진수, 2진수에서 10진수 만들기

1. 10진수에서 2진수 만들기

function DecimalToBinary(n) {
    console.log(`${n}의 이진수 구하는 DecimalToBinary() Start`);
    let numsArr = new Array();               // 이진수를 담을 배열 생성
    let binary;

    if(n > 0) {
        let naturalNum = n;
        let firstBinary = naturalNum%2;
        numsArr.push(firstBinary);

        while(true){
            if(naturalNum > 0){
                naturalNum = Math.floor(naturalNum/2);
                num = (naturalNum)%2;
                numsArr.push(num);
            } else {
                break;
            }
        }
        numsArr.reverse();
        if(numsArr[0] === 0){
            numsArr.shift();
        }
    }
    binary = numsArr.join('');

    console.log(`binary number : ${binary}`);
    return binary;
}

console.time();
DecimalToBinary(300);
console.log("\n====================");
console.timeEnd();

console.log("DecimalToBinary() End");

 

 

2. 2진수에서 10진수 만들기

// 2진수에서 10진수 만들기

function BinaryToDecimal(n) {
    console.log(`이진수 ${n}의 십진수 구하는 BinaryToDecimal() Start`);
    let numsArr = new Array();               // 이진수를 담을 배열 생성
    let DecimalNum;
    let squareRoot;
    let result = 0;

    for(let i=0; i<n.length; i++){
        numsArr.push(n[i]);
    }

    for(let i=0; i<numsArr.length; i++){
        squareRoot = numsArr.length-1-i;
        if(parseInt(numsArr[i]) === 1){
            DecimalNum = Math.pow(2, squareRoot);
            //console.log(`i : ${i}, squareRoot : ${squareRoot}, DecimalNum : ${DecimalNum}`);
            result = result + DecimalNum;
        }
    }
    console.log(`Decimal result : ${result}`);
    return result;
}

console.time();
BinaryToDecimal("11001011");
console.log("\n====================");
console.timeEnd();

console.log("BinaryToDecimal() End");

 

 

3. 리팩토링

// 10진수에서 2진수 만들기

function convertDecimalToBinary(decimal) {
    console.log(`convertDecimalToBinary::start => ${decimal}`);
    if (decimal <= 1) {
        return '';
    }

    const result = [];
    while (true) {
        if (decimal <= 1) {    
            result.push(decimal);        
            break;
        }

        result.push(decimal % 2);
        decimal = Math.floor(decimal / 2);
    }

    console.log(`convertDecimalToBinary::finish.${result}`);
    return result.reverse().join('');

    // console.log(`${decimalNum}의 이진수 구하는 DecimalToBinary() Start`);
    // let binaryNumArr = new Array();               // 이진수를 담을 배열 생성
    //let result = [];

    // if(decimalNum > 0) {
    //     let dividedNum = decimalNum;
    //     let firstBinaryNum = dividedNum % 2;
    //     binaryNumArr.push(firstBinaryNum);

    //     while(true){
    //         if(dividedNum > 0){
                // dividedNum = Math.floor(dividedNum/2);
                // remain = dividedNum % 2;
                // binaryNumArr.push(remain);
    //         } else {
    //             break;
    //         }
    //     }
        
    // }
    
    // console.log(`binary number`);
    // return binaryNumArr.reverse().join('');
}

// console.time();
// let binary = convertDecimalToBinary(300);
// console.log(binary);
// console.log("\n====================");
// console.timeEnd();

// console.log("DecimalToBinary() End");


const binary = convertDecimalToBinary(13);
console.log(`==>> ${binary}`);
// console.log(`==>> ${result == '1010'}`);

 

 

4. 리팩토링 2

// 10진수에서 2진수로 바꾸기 2번째
function getDecimalToBinary(decimal) {
    console.log(`getDecimalToBinary :: start`);

    if(decimal <= 1){
        return '-1';
    }

    let binary;
    let binaryContainer = [];
    let devidedNumber = decimal;

    if(decimal % 2 === 0) {
        binaryContainer.push('0');
    } else {
        binaryContainer.push('1');
    }
    
    while (true) {
        if(devidedNumber <= 1) {
            break;
        }
        
        devidedNumber = Math.floor(devidedNumber / 2);
        console.log(`devidedNumber 1 : ${devidedNumber}`);
        binary = devidedNumber % 2;
        binaryContainer.push(binary);
        console.log(`devidedNumber 2 : ${devidedNumber}, binary : ${binary}`);
    }

    console.log(`binaryContainer : ${binaryContainer}`);
    
    console.log(`getDecimalToBinary :: end`);
    return binaryContainer.reverse().join('');
}





console.log("\n=========================");
console.time();
let binary = getDecimalToBinary(100);
console.log(binary);
console.log("\n=========================");
console.timeEnd();