비트 시프트 연산자
시프트 연산자는 첫째 피연산자를 왼쪽 시프트 (<<) 또는 오른쪽 (>>) 두 번째 피연산자의 위치 번호로 지정 합니다.
구문
시프트 식:
가감 연산자 식시프트 식<<조금 식 시프트 식>>조금 식
두 피연산자가 모두 정수 계열 값 이어야 합니다.이러한 연산자는 일반적인 산술 변환이 수행합니다. 결과 형식은 형식 피연산자 변환 후입니다.
Leftward 변화를 오른쪽의 비워진된 비트 0으로 설정 됩니다.Rightward 변화에 대 한 변환 후 왼쪽된의 비워진된 비트는 첫 번째 피연산자의 형식을 기준으로 입력 됩니다.형식이 경우 unsigned를 0으로 설정 합니다.그렇지 않은 경우 부호 비트 복사본으로 채웁니다.왼쪽 시프트 연산자에 대 한 오버플로 문의 하지 않고
expr1 << expr2
곱하기 2입니다expr2.오른쪽 시프트 연산자에 대 한
expr1 >> expr2
2 나눔에에expr2 경우 expr1 서명 되지 않은 또는 음수가 아닌 값입니다.
두 번째 피연산자가 음수일 경우 나 오른쪽 피연산자 보다 크거나 너비에 승격된 왼쪽된 피연산자의 비트에서 이면 shift 연산의 결과가 정의 되지 않습니다.
변환이 수행 된 후 시프트가 오버플로 대 한 연산자를 제공 하지 않습니다 또는 shift 연산의 결과 첫 번째 피연산자의 형식에서 변환 후 나타낼 수 없으면 언더플로가 조건, 정보가 손실 될 수 있습니다.
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = ( x << 8 ) + ( y >> 8 );
이 예제에서 x 8 개 만큼 왼쪽으로 이동 됩니다 및 y 8 오른쪽 위치로 이동된 됩니다.0XAA55, 할당 및 아래로 값 추가 z.
음수 값은 오른쪽으로 이동 버림 절반 원래 값을 얻을 수 있습니다.예를 들어, –253 (이진 11111111 00000011) 오른쪽 1 비트 생성 매핑되지만 (이진 11111111 10000001)으로 이동 합니다.긍정 253 교대를 마우스 오른쪽 단추로 +126을 생성 합니다.
오른쪽 시프트는 부호 비트를 보존합니다.최상위 비트는 부호 있는 정수를 오른쪽으로 이동 하면 설정 상태가 유지 됩니다.최상위 비트는 부호 없는 정수를 오른쪽으로 이동 하면 지워집니다.