본문 바로가기
Coding&Script/C, C++,C#

연산자(삼항/비트연산자)

by WeetLies 2019. 3. 18.


삼항연산자
조건? 참:거짓으로 표현하는 연산자. 소스코드는 if문에 비해서 현저히 짧다는 장점이 있으나, 그만큼 가독성이 많이 떨어지며, 소스코드의 크기가 커질수록 유지보수 측면에서 관리가 힘들다. 그렇기때문에 삼항연산자는 대부분 쓰이지 않으나, 간혹 가독성을 해치지 않는 선에서 식별이 쉬울때 활용을 할 수는 있다...

위의 소스코드의 삼항연산자내용은 (a와b가 같다) ? (참일경우) 100 : (거짓일경우)-100 연산한 다음 참일경우 화면에 100 / 거짓일경우 -100을 출력한다. 당연히 a=7, b=7이기때문에 둘다 같은 값이기때문에 화면의 출력은 100이 된다.

비트연산자
비트연산자는 컴퓨터 내부적으로 작업하는 2진수 연산에 직접 개입하는 연산자이다. 연산자표는 아래와 같다.

 연산자(설명)

 필요항수

내용 

예시 

 ~(NOT)

단항(1개) 

값을 반전시킨다. 

 &(AND)

이항(2개)

1로 중복된 비트만 1로 표현 

&

 |(OR)

이항(2개) 

1로 표기되었으면 모두 1로표현 

^(XOR)

이항(2개) 

1로 중복된 비트를 0으로 표현 

 

<<(왼쪽시프트) 

이항(2개) 

숫자만큼 비트를 왼쪽으로 이동

>>(오른쪽시프트) 

이항(2개)

숫자만큼 비트를 오른쪽으로 이동 

 

로 표현된다. 

또한 비트연산자는 2진수이기때문에 아래와 같이 계산된다.

숫자값 

128 

64 

32 

16 

비트

위의 표에 따르면 8+2+1=11을 2진수로 표현하게 되는것이다. 

위의 소스코드를 작동하면

a의 비트 연산 부정값은 -12가 되는 이유는 int형의 비트를 확인해야한다.

int형은 4byte의 공간을 차지하게 되며, 이를 2진수로 표현하게 되면

00000000 00000000 00000000 00000000 이 된다. (8bit *4) 이 공간에서 맨 앞 0은 int형에서 값의 음수형과 양수형을 구분해서 표현하게 된다.

즉, int형이 구현할수 있는 데이터값은 31자리의 양수와 31자리음수+1값이 된다.

2진수 31자리로 표현할수 있는 양수데이터값은 2,147,483,647, 음수데이터값은 -2147483648이된다.

또한, 음수로 시작할때 양수 1의 비트값은 00000000 00000000 00000000 00000001이지만, 음수 1의 비트값은 11111111 11111111 11111111 11111111 부터시작하며, -2는 11111111 11111111 11111111 11111110 / -3은 11111111 11111111 11111111 11111101이된다.

즉 양수에서 음수로 값을 반전시킬때에는 음수로 변환하고 -1만큼 증가시켜야 한다. (2의보수)[각주:1]




  1. https://terms.naver.com/entry.nhn?docId=2835898&cid=40942&categoryId=32828 네이버 지식백과_2의보수 [본문으로]

'Coding&Script > C, C++,C#' 카테고리의 다른 글

함수/재귀함수  (0) 2019.03.19
반복문(for, while)  (0) 2019.03.18
조건문  (0) 2019.03.15
연산자(사칙연산,관계연산,논리연산,증감연산)  (0) 2019.03.13
Scanf활용  (0) 2019.03.12