|
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));
|