비트 연산(bitwise operation)이란 어떤 수 하나나 둘에 대해 비트 단위로 적용되는 연산이다.

기본[편집]

NOT[편집]

NOT 연산은 모든 비트의 값을 반전하는 연산이다.

JAVA
int r = ~x;

AND[편집]

AND 연산은 두 값의 각 자리를 비교해, 두 곳 모두에 1일 때에만 1을, 아닐 때에는 0으로 표시한다.

JAVA
int r = x & y;

OR[편집]

OR 연산은 두 값의 각 자리를 비교해, 두 곳 중 하나라도 1이라면 1을, 아닐 때에는 0으로 표시한다.

JAVA
int r = x | y;

XOR[편집]

XOR 연산은 두 값의 각 자리를 비교해, 두 곳의 값이 같다면 1을, 같지 않다면 0으로 표시한다.

JAVA
int r = x ^ y;

비트 시프트[편집]

ASL[편집]

ASL(산술적 좌측 시프트/Arithmetic Shift Left) 연산은 모든 비트의 값을 한자리씩 좌측으로 옮기는 연산이며, 남은 자리는 0으로 채운다. 결과적으로 LSL과 같다.

(수에 2의 n승을 곱한 것과 같다.)

JAVA
int r = x << n;

ASR[편집]

ASR(산술적 우측 시프트/Arithmetic Shift Right) 연산은 모든 비트의 값을 한자리씩 우측으로 옮기는 연산이며, 남은 자리는 원래의 부호값으로 채워진다. (양수일 때 0, 음수일 때 1)

(음수를 2의 n승으로 나눈 것과 같다. 나머지는 버린다)

JAVA
int r = x >> n;

LSL[편집]

LSL(논리적 좌측 시프트/Logical Shift Left) 연산은 모든 비트의 값을 한자리씩 좌측으로 옮기는 연산이며, 남은 자리는 0으로 채운다. 결과적으로 ASL과 같다.

(수에 2의 n승을 곱한 것과 같다.)

JAVA
int r = x << n;

LSR[편집]

LSR(논리적 우측 시프트/Logical Shift Right) 연산은 모든 비트의 값을 한자리씩 우측으로 옮기는 연산이며, 남은 자리는 0으로 채운다.

(수를 2의 n승으로 나눈 것과 같다. 나머지는 버린다)

JAVA
int r = x >>> n;

ROL[편집]

ROL(왼쪽으로 회전/Rotate Left)은 비트의 자리수를 우측으로 n만큼 회전시킵니다.


JAVA
int r = Integer.rotateLeft(x, n);

ROR[편집]

ROR(오른쪽으로 회전/Rotate Right)은 비트의 자리수를 우측으로 n만큼 회전시킵니다.


JAVA
int r = Integer.rotateRight(x, n);