반응형

연산자(4)

 

 

※ 비트 연산자 ※

 

-

 

 

-

 

비트 연산을 이해하기 위해서는 위의 비트 연산자 종류에 대한 이해와 함께 

 

다음 표에 나타나 있는 비트 연산 진리표를 알아야 한다.

 

-

 

 

-

 

AND(&), OR(|), XOR(^), 시프트(<<, >>) 연산

 

피연산자(연산에 사용되는 데이터)가 2개인 이항 연산자이지만

 

NOT(~) 연산자 피연산자가 1개인 단항 연산자이다.

 

아래의 예제를 봐보자.

 

-

 

test9.c
0.00MB

 

 

 

 

-

 

11행의 구문을 봐보자

 

-

 

 

-

 

먼저 변수 a b의 값 OR(|) 연산자를 이용해서 OR 연산을 수행하는 11행의 내용은 

 

다음 사진과 같이 비트 배열로 나타내 보면 결과를 명확히 알 수 있다.

 

-

 

 

-

 

12행 & 연산자를 사용해서 a b의 값 &(AND) 연산을 한 뒤에 그 결과를 출력하는 것으로 

 

다음 사진과 같이 비트 배열로 나타내어 결과를 확인하면 각각의 자리마다 1로 모두 일치하는 비트가 없어

 

그 결괏값이0이라는 사실을 알 수 있다.

 

-

 

 

-

 

13행 ^(XOR) 연산을 수행하는 연산으로 각 비트의 표현이 서로 다를 경우만 1이 된다.

 

따라서 다음 사진을 보면 비트가 서로 다를 경우만 결과가 1이기 때문에 최종 결과는 3이 되는 사실을 확인할 수 있다.

 

-

 

 

-

 

14행은 다음 사진과 같이 변수 a의 보수(1의 보수)를 취하는 것으로

 

1인 비트는 0으로, 0인 비트는 1로 바꾸는 연산을 취한다.

 

-

 

 

-

 

맨 위의 예제의 결과 내용과 같이 시프트 연산 중 

 

비트 배열을 왼쪽으로 이동시키는 연산(<<, 좌측 시프트 연산)의 경우

 

signed unsigned 자료형과는 관계없이 n개의 비트를 이동했을 때 오른쪽에서 n개의 비트만큼 0으로 채워지기

 

때문에 연산을 취하기 이전의 값에 2의 n승을 곱하는 경우와 같은 효과가 있다.

 

즉, <<(좌측 시프트 연산)은 제곱으로 증가된다.

 

참고로 시프트 연산 곱셈 연산보다 속도가 빠른 것으로 알려졌기 때문에

 

나중에 곱셈 연산을 대체할 수 있을 때는 시프트 연산을 사용하는 것이 좋다.

 

-

 

그리고 오른쪽으로 비트 배열을 이동시키는 연산(>>, 우측 시프트 연산)의 경우

 

자료형의 unsigned 또는 signed 형태에 따라 그 결괏값이 달라진다는 것을 알 수 있다.

 

signed 형태의 자료형이면 가장 왼쪽의 비트(최상위 비트)가 1일 경우

 

우측으로 비트 이동 시 최상위 비트가 1로 채워지고

 

최상위 비트가 0일 경우 우측으로 비트 이동 시 최상위 비트가 0으로 채워지게 된다.

 

unsigned 형태의 자료형에서 좌우 비트 이동할 때 모두 0으로 채워지는 것과는 대조적이다.

 

-

 

이 점을 주의해야 하며, 우측으로 비트 이동을 하는 시프트 연산을 사용하는 경우 자료형의 종류와

 

최상위 비트(부호 비트)가 어떤 값인지 확인하고 사용해야 한다.

 

지금까지 다양한 연산자의 종류에 대해서 배워보았다.

 

 연산자 각각 따로 사용될 수 있을 뿐만 아니라 서로 다른 연산자와 함께 사용될 수도 있다.

 

서로 다른 연산자가 섞여 있을 때의 우선순위는 각 연산자의 우선순위에 따라 연산 순서가 결정된다.

 

연산자의 우선순위는 아래의 사진과 같다.

 

-

 

 

-

 

연산자 우선순위를 모두 암기할 필요까지는 없다.

 

필요에 따라 표의 내용을 참고하여 사용하면 될 것이다.

 

만약 서로 다른 연산자가 함께 사용되어야 하는 상황에서 연산자의 우선순위가 정확하게 기억나지 않으면

 

안전하게 우선순위가 가장 높아지게 해주는 역할을 하는

 

'(' 기호와 ')' 기호를 쓰는 괄호 연산자로 묶어서 사용할 수 있다.

 

사실 이 방법이 소스코드의 가독성을 더욱 높여 주기 때문에 연산자의 우선순위가 애매한 경우

 

연산자 우선순위를 확인하여 사용하는 방법보다 괄호 연산자를 사용하는 방법을 추천한다.

반응형

'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글

8. 반복문  (0) 2021.02.01
7. 조건문  (0) 2021.02.01
5. 연산자(3)  (0) 2021.02.01
4. 연산자(2)  (0) 2021.02.01
3. 연산자  (0) 2021.02.01

+ Recent posts