2016-09-27 3 views
-1

그래서 이진수에서 10 진수로 변환 할 때 다음과 같은 해결책을 보았습니다. 작동하는 것을 볼 수는 있지만 실제로 알고리즘 이론을 이해하고 싶습니다. 2 진수에서 10 진수로의 변환 이론

#include<iostream> 
using namespace std; 

int main() 
{ 
    long bin, dec = 0, rem, num, base = 1; 

    cout << "Enter the binary number(1s and 0s) : "; 
    cin >> num; 
    bin = num; 
    while (num > 0) 
    { 
     rem = num % 10; 
     dec = dec + rem * base; 
     base = base * 2; 
     num = num/10; 
    } 
    cout << "The decimal equivalent of " << bin << " : " << dec << endl; 
    return 0; 
} 

그래서 우리는 이동 입력의 나머지 부분을 추가하고 위치의 기준에 의해 그것을 곱 만이 정답까지 추가 끝 어떻게 난 정말 이해가 안된다.

내가 제공 할 수있는 것이 있다면 알려주십시오.

감사 시작 num에서

+2

디버거로 코드를 단계별로 실행하여 작동 방법을 확인할 수 있어야합니다. 또는 연필과 종이에 사용하십시오. 그렇게하면 무슨 일이 일어나고 있는지 더 잘 이해할 수 있습니다. – NathanOliver

+2

이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –

+2

힌트 : 실제로'cin >> num'은 이진 표현이 아닌 사용자 입력으로부터 십진수 표현을 읽습니다. 이것은 바이너리 표현의'std :: string'을 읽고 그것을 ['std :: bitset'의 생성자에 전달하는 매우 복잡한 방법처럼 보입니다. –

답변

1

숫자의 이진 표현을 보유하고 있지만, 열 번호는 기재 (예 : 1,011 천 열한 것이다).

라인 rem = num % 10;은 10 진수 10의 10 진수를 사용하여 의사 2 진수의 마지막 유효 숫자를 취합니다.

dec = dec + rem * base; 십진법 표기의 자리수 (기본)를 더하십시오.

base = base * 2; 다음 자릿수 (1,2,4,8, ...)의 가중치를 업데이트하십시오.

num = num/10; 1 자리 오른쪽 시프트와 동일한 이진 표현의 마지막 자리를 버립니다.

0

임의의 기준에서 숫자는 숫자의 합계와 같으며 각 숫자의 기준은 힘입니다.

예를 들어, 소수점 기준에서 4734 = 4.103 + 7.10² + 3.10 + 4.1입니다. 이 수식을 사용하면 숫자에서 내부 정수 표현으로 변환 할 수 있습니다. 기본의 현재 힘 (1, 10, 100 ...)으로 임시 변수를 유지하면서 오른쪽에서 왼쪽으로 할 수 있습니다.

  • 마지막 자리 숫자 10 모듈로 10가 = 4 마지막 숫자로 번호가 삭제
  • 가있다 즉 4,734퍼센트, 다음과 같이

    반대의 동작이 자리 정수가 얻어진다 (10)에 의한 지수, 주어진 알고리즘 10분의 4,734 = 473

즉, 입력은 실제로 숫자 만 0/1로 진수이다. 알고리즘은 숫자를 오른쪽에서 왼쪽으로 (기본 10) 하나씩 추출한 다음 내부 표현으로 이진수 인 으로 다시 결합합니다. 예를 들어

,

1,100

가 자리를 제공 하나, 하나의 파워 1, 2, 2² = 4 2³ = 8 재결합 0, 0, 총 4 + 8 = 12

주는

실제로 cout 문은 숫자 2와 1을 생성하고 역순으로 출력하는 2 진수 - 10 진수 변환을 수행합니다.

관련 문제