델파이 shl 과 shr 설명
shr, shl은 논리연산자 or 비트연산자
각각 shift right, shift left 를 말한다.
011011 이라는 2진수가 있을때
shr 2 하면 000110 이렇게 오른쪽으로 두칸 쉬프트 된다.
011011 을 shl 2 하면 101100 이 된다.
x shl y 에서 x를 y bit만큼 왼쪽으로 bitwise shift 한다.
이것은 곱하기와 나누기 효과를 낼 수 있는데요..
shl의 경우 x 곱하기 2의 y승 이 된다.
예를 들어..
01101(10진수로 13)을 shl 1 했을때의 결과는
11010(10진수로 26)이 되므로
두배가 된 것을 알 수 있다.
이것은 활용하기 나름이구..
어떤 코드로의 encode, decode할때 많이 쓰이기도 한다.
참고로 not, and, or, xor도 같은 논리 연산자 이다.
=================================================
또 다른 설명....
x shl y 및 x shr y 연산은 x의 값을
왼쪽 또는 오른쪽으로 y 비트만큼 이동한다.
(x는 부호없는 정수인 경우)
x에 2 ^ y를 곱하거나 나누는 것과 같다.
결과는 x와 동일한 유형이다.
예를 들어 N이 01101 (10 진수 13) 값을 저장하면
N sh1 1은 11010 (10 진수 26)을 반환한다.
y 값은 x 유형의 크기로 모듈로 해석된다.
예를 들어, x가 정수인 경우 정수는 32 비트이고
40 mod 32는 8이므로 x shl 40은 x shl 8로 해석됨
아래를 보면~
32 및 64 비트 Windows 컴파일러 모두 XE3 및 XE5 로
이 작업을 실행했으며 위 코드에서 언급했듯이 출력이 일관된다.
(u8 shl 7) shr 7는 8 비트 유형의 컨텍스트에서
완전히 평가 될 것으로 예상했다.
따라서 비트가 8 비트 유형의 끝을 넘어
이동하면 해당 비트가 손실된다.
내 질문은 프로그램이 작동하는 이유이다.
흥미롭게도 나는 프로그램을 C++로 변환했고
64 비트 mingw 4.6.3에서
동일한 출을 얻는다.
답
이유는 type promotion이다.
암시 적 유형 변환의 한 가지 특별한 경우는 유형 승격이다
여기서 컴파일러는 자동으로 이진 표현을 확장한다.
정수 또는 부동 소수점 유형의 객체 프로모션은
일반적으로 대상 플랫폼의 기본 유형보다
작은 유형과 함께 사용 이를 위해 산술 및
논리 연산 이전의 ALU ALU가 더 많은 작업을 수행
할 수있는 경우 가능한 작업 또는 더 효율적
하나의 유형보다. C 및 C++는
부울, 문자, 넓은 문자, 열거 및 짧은 정수
int로 승격 된 유형 및 float 유형의 오브젝트의 경우
두 배로 촉진된다.
다른 유형 변환과 달리 프로모션
절대 정밀도를 잃거나 객체에 저장된 값을 수정하지 말자.
다음 코드에서
u8 값은 shl 이전에 32- 값으로 승격되고;
결과를 수정하려면 명시 적 유형 변환이 필요하다.
C++ 표준, 4.5 절 전체 프로모션 :
char, signed char, unsigned char, short int
또는 r 유형의 rvalue
int가 나타낼 수 있으면 부호없는
short int를 int 유형의 rvalue로 변환 할 수 있다.
소스 유형의 모든 값;
그렇지 않으면,
소스 rvalue는
unsigned int 유형의 rvalue로 변환된다.
델파이가 타입 프로모션에서 동일한 규칙을 따르는 지
확인하기 위해 다음 애플리케이션을 작성한다.
'Delphi > 문법' 카테고리의 다른 글
델파이 속성(Property) 이해하기 객체 지향 프로그래밍에서의 활용과 장점 (3) | 2023.06.01 |
---|---|
열거형의 사용방법 (0) | 2021.10.08 |
제네릭 - 델파이 TDictionary 사용 (0) | 2021.06.17 |
모바일 개발을 위한 델파이 언어 -4- (0) | 2021.06.16 |
모바일 개발을 위한 델파이 언어 -3- (0) | 2021.06.15 |
댓글