2010-11-19 5 views
0

다음 코드가 있는데 dec을 변환합니다. 바이너리 (int로 저장)과는 C : B에 잘 실행 :PIC에서 기본 이진 변환이 실패합니다

for(i=0;i<8;i++) 
    { 
    carry = start_value%2; 
    tab[bla] = carry; 
    bla++; 
    start_value = start_value/2; 
    } 

for(i=bla; i>0; i--) 
     { 
     binary = binary + tab[i]*pow(10,i); 
     } 

을하지만 MikroC와 PIC18F4550에 동일 할 때 그냥 실패! 필자는 'pow'를 포함하고 내가 사용하는 변수에 대한 선언을 존중했습니다. 무슨 일이 있어도 결과가 잘못되었습니다 (예 : 110110 대신 -62053). 이 을 :)으로 살펴 본다위한

덕분에이 이진수이 이상의 더 많은 시간을 증가 이후 당신은 i = bla - 1에서 두 번째 루프를 시작합니다 좋은 하루를

+0

변수 선언이있는 컴파일 가능한 예제를 제공하고 출력이 어떻게 수행되는지 보여줄 수 있습니까? – philant

+0

PIC에 sizeof (int)가 다른가요? –

답변

0

되세요. 또한 그것은 tab[]은 0

초기화되지 않고, 제 2 고리가 제 탭 부재를 포함한다 것일 수 : 탭 [0]

for(i = bla - 1; i >= 0; i--) 
{ 
    binary += tab[i] * pow(10, i); 
} 
0

를 점검 int 타입의 크기 (sizeof(int)) 이 PIC 아키텍처. 예를 들어, int이 16 비트이면 최대 값은 65535 (unsigned int의 경우) 또는 -32768 ~ 32767 (int의 경우)입니다. 아마도 문제는 계산중인 값이 사용중인 유형에 비해 너무 크다는 것입니다.

0

2 진수의 배열에서 10 진수 값을 얻으려면 10이 아닌 2의 적절한 제곱으로 곱해야합니다. pow()가있는 것으로 가정하면 pow (base, exponent) 대신 pow (2, i)를 사용해야합니다.

0

jmpcm : int는 내 PIC18F에서 16 비트 (2 바이트)입니다. 그러나 문제는 코드가 내 컴퓨터에서 제대로 실행되지만 PIC에서는 실행되지 않는 반면, 사용하는 변수는 같은 크기를 사용한다는 것입니다.

필립 : 나는 여러분이 테이블이 깨끗 해지지 않을 것이라고 생각합니다! 아직 그것을 테스트 할 수 없습니다.

Jeanne Pindar : 아니요. int (RAM 공간을 절약해야 함)에서 상호 작용해야하는 비트 배열을 저장하므로 최종 저장시에 여전히 base10을 사용하고 있습니다.

모든 : 그래서 8 비트의 그룹에 1 비트를 저장하고 int로서 취급 할 수

struct { 
unsigned int bit0: 1; 
unsigned int bit1: 1; 
... 

: 는 내가 모든 비트를 정의하는 구조로 밖으로 내 방식 관리 주요 계산 및 Nx1 매트릭스에 액세스하십시오.

그럼에도 불구하고 도움을 주셔서 감사합니다!

+0

귀하의 질문에 대한 답변이 아닙니다. 이것은 각 답변에 개별 의견으로 게시되어야합니다. 질문을 수정할 수도 있습니다. faq : http://stackoverflow.com/faq#howtoask를 참조하십시오. – philant

관련 문제