위의 소스코드의 삼항연산자내용은 (a와b가 같다) ? (참일경우) 100 : (거짓일경우)-100 연산한 다음 참일경우 화면에 100 / 거짓일경우 -100을 출력한다. 당연히 a=7, b=7이기때문에 둘다 같은 값이기때문에 화면의 출력은 100이 된다.
연산자(설명) |
필요항수 |
내용 |
예시 |
~(NOT) |
단항(1개) |
값을 반전시킨다. |
|
&(AND) |
이항(2개) |
1로 중복된 비트만 1로 표현 |
|
|(OR) |
이항(2개) |
1로 표기되었으면 모두 1로표현 |
|
^(XOR) |
이항(2개) |
1로 중복된 비트를 0으로 표현 |
|
<<(왼쪽시프트) |
이항(2개) |
숫자만큼 비트를 왼쪽으로 이동 |
|
>>(오른쪽시프트) |
이항(2개) |
숫자만큼 비트를 오른쪽으로 이동 |
|
로 표현된다.
또한 비트연산자는 2진수이기때문에 아래와 같이 계산된다.
숫자값 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
비트 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
위의 표에 따르면 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
- 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 |