자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Byte value와 Hex Byte의 계산 문제
2019.10.02 17:01
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
하기와 같은 함수와 같이 델파이 7이하 까지는 쓰이지 않던 방식인데 하기의 함수를 어떻게 해석해야 할지
고수님의 조언 부탁드립니다.
function TGXDLMSSettings.IncreaseReceiverSequence(value : Byte): Byte;
begin
Result := Byte((value + $20) or $10 or value and $E);
end;
상기와 같이 bit연산에서 갑자기 (value + $20) 의 값을 어떻게 해석해야 할지요?
또한 다음과 같은 경우도 있습니다.
if (Integer(data.MoreData) and Integer(TRequestTypes.rtFrame) <> 0) Then ...
(1) data.MoreData : TRequestType data
(2) TRequestTypes : (rtNone = 0, rtDataBlock = 1, rtFrame = 2);
상기 조건에서 열거형에 Integer형변환을 하고 비트 연산자인 and를 연결하여 0 이 아니면 이라고 해석하면
Integer 의 숫자형과 bit 연산인 and가 어떻게 연결되어 해석해야 할지 문의 드립니다.
감사합니다.
댓글 2
Delphi Byte value와 Hex Byte의 계산 문제
2019.10.02 17:01
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
하기와 같은 함수와 같이 델파이 7이하 까지는 쓰이지 않던 방식인데 하기의 함수를 어떻게 해석해야 할지
고수님의 조언 부탁드립니다.
function TGXDLMSSettings.IncreaseReceiverSequence(value : Byte): Byte;
begin
Result := Byte((value + $20) or $10 or value and $E);
end;
상기와 같이 bit연산에서 갑자기 (value + $20) 의 값을 어떻게 해석해야 할지요?
또한 다음과 같은 경우도 있습니다.
if (Integer(data.MoreData) and Integer(TRequestTypes.rtFrame) <> 0) Then ...
(1) data.MoreData : TRequestType data
(2) TRequestTypes : (rtNone = 0, rtDataBlock = 1, rtFrame = 2);
상기 조건에서 열거형에 Integer형변환을 하고 비트 연산자인 and를 연결하여 0 이 아니면 이라고 해석하면
Integer 의 숫자형과 bit 연산인 and가 어떻게 연결되어 해석해야 할지 문의 드립니다.
감사합니다.
AND, OR 연산과 ADD 연산의 차이를 생각하시기 바랍니다.
AND, OR 연산은 bit 연산입니다.
아시겠지만 AND 연산은 비트별로 모두 1인 경우 해당 자리에 1을
OR 연산은 둘중의 하나가 1인 경우 해당 자리에 1을 설정합니다.
(value + $20)
+(Add) 연산은 말그대로 더하기입니다.
예를 들면 $0A00 + $20 = $0A20, $00A0 + $20 = $00C0이 되겠네요.
Integer(data.MoreData) and Integer(TRequestTypes.rtFrame) <> 0
두가지 데이터 data.MoreData, TRequestTypes.rtFrame의 and 연산 후 겹치는 비트가 없을 경우 문장을 수행하는 조건입니다.
보통 권한 확인을 빠르게 하는 용도로 사용되곤 합니다. 위 코드도 데이터가 어떤 타입을 지원한느지를 판단하기 윈한 문장 같습니다.
다음과 같은 코드로 더 많이 사용됩니다.
if(Integer(data.MoreData) and TRequestTypes.rtFrame = TRequestTypes.rtFrame) then
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)