비트 시프트 연산자Bitwise Shift Operators

시프트 연산자는 두 번째 피연산자가 지정하는 위치 수만큼 첫 번째 피연산자를 왼쪽(<<) 또는 오른쪽(>>)으로 이동합니다.The shift operators shift their first operand left (<<) or right (>>) by the number of positions the second operand specifies.

구문Syntax

shift-expression:shift-expression:
additive-expressionadditive-expression

shift-expression << additive-expression shift-expression >> additive-expressionshift-expression << additive-expression shift-expression >> additive-expression

피연산자는 둘 다 정수 계열 값이어야 합니다.Both operands must be integral values. 이러한 연산자는 일반적인 산술 변환을 수행하며, 결과의 형식은 변환 후 왼쪽 피연산자의 형식입니다.These operators perform the usual arithmetic conversions; the type of the result is the type of the left operand after conversion.

왼쪽으로 이동하는 경우 비워진 오른쪽 비트는 0으로 설정됩니다.For leftward shifts, the vacated right bits are set to 0. 오른쪽으로 이동하는 경우 비워진 왼쪽 비트는 변환 후 첫 번째 피연산자의 형식에 따라 채워집니다.For rightward shifts, the vacated left bits are filled based on the type of the first operand after conversion. 형식이 unsigned이면 0으로 설정되고,If the type is unsigned, they are set to 0. 그렇지 않으면 부호 비트를 복사하여 채워집니다.Otherwise, they are filled with copies of the sign bit. 오버플로가 없는 왼쪽 시프트 연산자의 경우 다음 문은For left-shift operators without overflow, the statement

expr1 << expr2   

2expr2를 곱한 값과 같습니다.is equivalent to multiplication by 2expr2. 오른쪽 시프트 연산자의 경우 다음 문은For right-shift operators,

expr1 >> expr2   

expr1이 부호가 없거나 음수가 아닌 값인 경우 2expr2로 나눈 값과 같습니다.is equivalent to division by 2expr2 if expr1 is unsigned or has a nonnegative value.

두 번째 피연산자가 음수인 경우나 오른쪽 피연산자가 확장된 왼쪽 피연산자의 너비(비트)보다 크거나 같은 경우 시프트 연산의 결과가 정의되지 않습니다.The result of a shift operation is undefined if the second operand is negative, or if the right operand is greater than or equal to the width in bits of the promoted left operand.

시프트 연산자로 수행된 변환은 오버플로 또는 언더플로 조건을 지원하지 않으므로 변환 후 시프트 연산의 결과가 첫 번째 피연산자의 형식으로 표현될 수 없는 경우 정보가 손실될 수 있습니다.Since the conversions performed by the shift operators do not provide for overflow or underflow conditions, information may be lost if the result of a shift operation cannot be represented in the type of the first operand after conversion.

unsigned int x, y, z;  

x = 0x00AA;  
y = 0x5500;  

z = ( x << 8 ) + ( y >> 8 );  

이 예제에서 x는 8개 위치만큼 왼쪽으로 이동하고 y는 8개 위치만큼 오른쪽으로 이동합니다.In this example, x is shifted left eight positions and y is shifted right eight positions. 이동된 두 값을 더하여 0XAA55가 생성되고 z에 할당됩니다.The shifted values are added, giving 0xAA55, and assigned to z.

음수 값을 오른쪽으로 이동하면 원래 값의 반을 정수로 내림한 값이 생성됩니다.Shifting a negative value to the right yields half the original value, rounded down. 예를 들어 –253(이진수 11111111 00000011)을 오른쪽으로 1비트 이동하면 –127(이진수 11111111 10000001)이 생성됩니다.For example, -253 (binary 11111111 00000011) shifted right one bit produces -127 (binary 11111111 10000001). 양수 253을 오른쪽으로 이동하면 +126이 생성됩니다.A positive 253 shifts right to produce +126.

오른쪽 시프트는 기호 비트를 유지합니다.Right shifts preserve the sign bit. 부호 있는 정수가 오른쪽으로 이동하면 최상위 비트는 설정된 상태로 유지됩니다.When a signed integer shifts right, the most-significant bit remains set. 부호 없는 정수가 오른쪽으로 이동하면 최상위 비트는 해제됩니다.When an unsigned integer shifts right, the most-significant bit is cleared.

참고 항목See Also

왼쪽 시프트 및 오른쪽 시프트 연산자(>> 및 <<)Left Shift and Right Shift Operators (>> and <<)