|
안녕하세요.빌더 초보입니다.
비트 시프트 연산과 관련해 질문이 있어서요.^^
먼저 관련 소스입니다.
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형으로 하고 시리얼 전송을 해보니 결과 값이 다르게
나오더군요.
해결책이 없을가요?
^^
즐거운 하루되세요.
|