2011-03-01 1 views
0

이상한 문제가 있습니다. 10 진수에서 2 진수로 변환하는 간단한 함수를 만들었습니다. 인수는 십진수의 숫자를 나타내는 int 값이고 함수는 이진수를 나타내는 비트 세트를 반환합니다.10 진수에서 2 진수로 변환하고 비트 세트를 반환 할 때의 문제

문제는 10000000000000000000000000000000 (10 진수 2,147,483,648)보다 작은 이진수의 변환이 완벽하게 작동하지만 변환 할 숫자가 더 높을 경우 변환이 제대로 작동하지 않는다는 것입니다. 실수는 어디 있습니까 ??? 여기

나는 당신에게 기능을 보내

bitset<15000> Utilities::getDecToBin(int dec) 
{ 
    bitset<15000> columnID; 
int x; 
    for(x=0;x<columnID.size();x++) 
    { 
     columnID[x]=dec%2; 
     dec=dec/2; 
    } 

    return columnID; 
} 

감사를 사전에 모든 도움을! : D

+0

산술 연산 대신 논리 연산자를 사용하는 것이 더 좋습니다.'columnID [x] = dec & 1; dec >> = 1;' –

답변

0

long int, long int 또는 심지어 string의 배열을 메소드의 입력으로 사용해야합니다 (데이터 소스 및 함수 호출 방법에 따라 다름).

1

32 비트 int의 범위는 -2,147,483,648에서 2,147,483,647 사이입니다.

크기가 클수록 1073741825를 의미하는 경우 잘못된 것이 없습니다.

가장 중요한 위치 (예 : 2147483648)에 여분의 비트를 추가하는 경우 서명 된/서명되지 않은 문제가 발생할 수 있습니다.

루프를 columnID의 크기로 제한하는 것을 확인했습니다. 비트 단위의 dec의 크기로 제한하거나 dec이 0 일 때 중지하는 것이 좋습니다.

+0

맞습니다! 32 비트가 넘는 문제는 ... 한 가지 질문입니까? 가장 큰 정수를 가질 수있는 변수 유형은 무엇입니까? 왜냐하면 내가 원할 것이기 때문에 15,000 비트 정수가 아니지만 비슷한 것이있을 것입니다. – thomas

0

30 비트까지만 작동한다는 것이 놀랍지 만 31을 관리 할 수 ​​있어야하지만 32는 관리 할 수 ​​있어야합니다. 비트 당신은 부호없는 정수가 필요합니다. 부호없는 64 비트 정수를 사용하면 그 이상을 관리 할 수 ​​있지만 15,000 비트 정수는 특수 클래스를 통해서만 구현할 수 있습니다.

+0

ups! 너는 쓰고있어! 32 비트가 넘는 문제는 ... 한 가지 질문입니까? 가장 큰 정수를 가질 수있는 변수 유형은 무엇입니까? 왜냐하면 내가 원할 것이기 때문에 15,000 비트 정수가 아니지만 비슷한 것이있을 것입니다. – thomas

+0

내가 알고있는 가장 큰 일반 정수 유형은 64 비트 뿐이며이 부호가없는 정수를 사용하면 64 개를 모두 사용할 수 있습니다. 구현은 C++에서 고유하지만 종종 uint64_t 또는 이와 유사한 형식으로 typedef됩니다. – CashCow

관련 문제