|
heartsim 님이 쓰신 글 :
: 안녕하세요.빌더 초보입니다.
: 비트 시프트 연산과 관련해 질문이 있어서요.^^
: 먼저 관련 소스입니다.
:
: char TotalData[3]={0,0,0};
:
: TotalData[0]=16;
: TotalData[1]=1;
:
: if(Table1->FieldByName("Name")->AsString=="NTPAL")
: TotalData[2]=TotalData[2] | Edit5->Text;
: else if(Table1->FieldByName("Name")->AsString=="CCD")
: TotalData[2]=TotalData[2] | Edit5->Text<<1;
: else if(Table1->FieldByName("Name")->AsString=="YDOUT")
: TotalData[2]=TotalData[2] | Edit5->Text<<2;
: else if(Table1->FieldByName("Name")->AsString=="UVDOUT")
: TotalData[2]=TotalData[2] | Edit5->Text<<4;
: else if(Table1->FieldByName("Name")->AsString=="REC601")
: TotalData[2]=TotalData[2] | Edit5->Text<<5;
: else if(Table1->FieldByName("Name")->AsString=="DSYNC")
: TotalData[2]=TotalData[2] | Edit5->Text<<6;
: else if(Table1->FieldByName("Name")->AsString=="SG135")
: TotalData[2]=TotalData[2] | Edit5->Text<<7;
:
: for(int i=0;i<3;i++)
: {
: ComPort1->WriteStr(TotalData[i]);
: }
:
: 위와 같습니다.
: 일단 시프트는 <<(왼쪽으로) 이동하는게 맞는 것 같은데요...
: 그리고 WriteStr을 전송할 때 TotalData를 AnsiString형이 아닌 char형으로 했습니다.
: 여기까지는 프로그램이 돌아가는 것으로 봐서는 문제가 없는 듯........
: 그런데...
: 맨 끝에 Edit5->Text<<7로 했을 때, 1로 세팅을 하면 invalid라고 에러가 나더군요.
: 물론 원인은 char형으로 해서인지 1xxx xxxx로 자리수를 넘어서서 그런 것 같습니다.
: 일단은 int형이나 unsigned형으로 하고 시리얼 전송을 해보니 결과 값이 다르게
: 나오더군요.
: 해결책이 없을가요?
: ^^
:
:
: 즐거운 하루되세요.
:
:
:
:
:
:
:
AnsiString 은 Class 입니다.
근데
Class 와 char형 변수와의 비트연산은 좀 이상한데요.
|