1. 표현식
프로그램은 많은 식과 조건이 조합되어 특정 작업을 수행하는 명령의 모음
프로그래밍에서 계산할 때 사용하는 식을 표현식(expression)
계산을 수행하는 것이 목적이므로, 항상 결과를 가진다
따라서 대부분의 표현식은 여러개의 피연산자와 연산자로 구성
연산자는 연산의 종류를 결정하고 피연산자는 연산에 참여하는 값 또는 식별자이다
표현식: 1 + 2
1,2는 피연산자
+는 연산자
2. 상수 표현식
상수로만 이뤄진 단순한 표현식
상수는 1, 12.345, 'A'같이 변하지 않는 값
3. 단항 연산자 표현식
연산자와 피연산자가 일대일로 매칭되는 표현식
연산에 참여하는 피연산자가 하나인 표현식이다
형변환, 부호변경, 증감 연산자 등이 모두 포함
부호 연산자: +a, -a
증감 연산자: ++a, --a, a++, a--
형식 변환: (type)a
크기: sizeof(a)
논리 not: !a
비트 연산자: ~a
포인터 연산자: *a
주소 연산자: &a
4. 증감 연산자
증가 연산자인 ++는 피연산자를 1만큼 증가
감소 연산자인 --는 피연산자를 1만큼 감소
변수 앞에 붙는 전위 연산 ++a와 뒤에 붙는 후위 연산 a++는 순서에 차이가 있다
#include <iostream>
using namespace std;
int main(){
int a = 0; //최초 a 값 0
int b = 0; //최초 b 값 0
int a_prefix;
int b_postfix;
a_prefix = ++a; //a값을 1 증가시키고 a_prefix에 대입
b_postfix = b++; //b값을 b_postfix에 대입하고 b를 1 증가
cout << "a = " << a << ", " << "a_prefix = " << a_prefix << endl;
cout << "b = " << b << ", " << "b_postfix = " << b_postfix << endl;
return 0;
}

결과를 보면 같은 증가 연산인데도 전위인지 후위인지에 따라 결과가 다르다
a 변수 앞에 붙은 전위 연산자는 a 변수가 다른 연산에 이용되기 전에 먼저 증가가 수행
그래서 a 값이 처음 0에서 1이 되고 이후 a_prefix에 변수 a가 대입
결국 a와 a_prefix는 같은 값이 출력
반면 후위 연산자는 전위 연산자와 반대로 b_postfix에 b값인 0을 대입하는 연산이 먼저 수행된다
이후 b가 증가해 1이 출력
그래서 b와 b_postfix는 다른 값이 출력
5. 논리 NOT
값이나 식별자 앞에 !를 붙여서 true는 false로 false는 true로 반전
C나 C++에서 0은 false로 0 외에는 모두 true로 취급함
6. 비트 연산자
비트 연산자 ~는 비트열을 반전하라는 뜻으로 각 자릿수의 비트값을 반대로 바꿔 1의 보수로 변환함
0과 1로 이루어진 2진수는 0 > 1, 1 > 0으로 바뀐다
16진수 0은 모두 f로 바뀐다
#include <iostream>
using namespace std;
int main(){
unsigned int value = 0x00000000; //0을 16진수(hex)로 표현한 값
value = ~value;
cout << hex << value << endl;
return 0;
}

7. 2의 보수
1의 보수에 1을 더하면 2의 보수를 구할 수 있다
양수의 모든 비트를 반전한 1의 보수에 1을 더해 음수를 표현하는 방법에 사용
가장 첫번째 비트는 부호 비트로 활용
10진수 | 2진수 | 1의 보수 | 2의 보수(음수) | 10진수(음수) |
0 | 0000 0000 | 1111 1111 | 0000 0000 | 0 |
1 | 0000 0001 | 1111 1110 | 1111 1111 | -1 |
2 | 0000 0010 | 1111 1101 | 1111 1110 | -2 |
3 | 0000 0011 | 1111 1100 | 1111 1101 | -3 |
4 | 0000 0100 | 1111 1011 | 1111 1100 | -4 |
5 | 0000 0101 | 1111 1010 | 1111 1011 | -5 |
1의 보수에 1을 더한게 2의 보수라면서 왜 1111 1111에 1을 더하면 0000 0000이냐?
비트 크기를 고정해야해서 그런다네
'프로그래밍 > C++' 카테고리의 다른 글
키워드와 리터럴 (0) | 2025.02.15 |
---|---|
C++의 변수 형식 변환 (0) | 2025.02.12 |
L-value와 R-value?? (0) | 2025.02.12 |
C++ 변수 유효 범위 (0) | 2025.01.23 |
C++에서 사용하는 데이터 형식 (0) | 2024.12.30 |