|
하하 그렇네요...
감사합니다....
김진호.불사새 님이 쓰신 글 :
: Bit1~10은 왜 저렇게 쓰신건가요? 해당 변수에는 각각 비트 위치에 따른 값이 들어가 있는건가요?
: Bit 변수 하나 잡아서 하면 되는게 아닐까요...뭐 암튼....
:
: 안되는 가장 큰 이유는...
:
: for문을 잘못 쓰셨습니다.
:
: for (초기값 ; 조건 ; 증감) 이렇게죠.
:
: for(int i = 8; i--; i >= 0)
:
: 이것의 경우, 초기값 8 들어가고...조건 확인하면서 -1 되고... 증감쪽은 무의미.
: 결국 7부터 시작하다가 i--이 0이 될때 조건이 false가 되니 루프 끝.
:
: : for(int i = 0; i++; i < 10) Binary[i] = 0;
: : for(int i = 0; i++; i < 10) Angle[i] = 0;
: 이건 타지도 않죠. i=0이고 조건에서 이미 i는 0이리 루프 끝.
: ++i였으면 그냥 비정상적으로 프로그램이 죽었겠죠. 1부터 시작해서 int범위 크기까지 한바퀴 돌아야 하니...
:
: 궁금이 님이 쓰신 글 :
: : 10bit 그레이코드를 바이너리 값으로 변환할려고 있는데... 뭐가 잘 안되네요....
: : 아래 변환공식이 틀렸나요.
: :
: : Gray[0] = (Bit1 & 0x01) ? 1 : 0;
: : Gray[1] = (Bit2 & 0x02) ? 1 : 0;
: : Gray[2] = (Bit3 & 0x04) ? 1 : 0;
: : Gray[3] = (Bit4 & 0x08) ? 1 : 0;
: : Gray[4] = (Bit5 & 0x10) ? 1 : 0;
: : Gray[5] = (Bit6 & 0x20) ? 1 : 0;
: : Gray[6] = (Bit7 & 0x40) ? 1 : 0;
: : Gray[7] = (Bit8 & 0x80) ? 1 : 0;
: : Gray[8] = (Bit9 & 0x100) ? 1 : 0;
: : Gray[9] = (Bit10 & 0x200) ? 1 : 0;
: :
: : for(int i = 0; i++; i < 10) Binary[i] = 0;
: : for(int i = 0; i++; i < 10) Angle[i] = 0;
: :
: : Binary[9] = Gray[9];
: : for(int i = 8; i--; i >= 0) {
: : Binary[i] = (Binary[i+1] == Gray[i]) ? 0 : 1; //exclusive OR
: : }
: :
: : Angle[9] = (Binary[9] == 1) ? 512 : 0;
: : Angle[8] = (Binary[8] == 1) ? 256 : 0;
: : Angle[7] = (Binary[7] == 1) ? 128 : 0;
: : Angle[6] = (Binary[6] == 1) ? 64 : 0;
: : Angle[5] = (Binary[5] == 1) ? 32 : 0;
: : Angle[4] = (Binary[4] == 1) ? 16 : 0;
: : Angle[3] = (Binary[3] == 1) ? 8 : 0;
: : Angle[2] = (Binary[2] == 1) ? 4 : 0;
: : Angle[1] = (Binary[1] == 1) ? 2 : 0;
: : Angle[0] = (Binary[0] == 1) ? 1 : 0;
: :
: : total_angle = 0;
: : for(int i = 0; i < 10; i++) {
: : total_angle += Angle[i];
: : }
: :
: : Memo1->Lines->Add(AnsiString().sprintf("%.1f", total_angle));
|