0 ~ 7까지 총 8개의 숫자를 표현할 수 있다. -> 정수 앞에 0을 붙여서 8진수라고 명시해준다. -> 각 자리당 000 ~ 111까지 표현할 수 있다.
16진수
0 ~ 15까지 총 16개의 숫자를 표현할 수 있다. / 정수 앞에 0x를 붙여서 16진수라고 명시해준다. -> 10이상부터는 알파벳을 사용하여 혼돈을 방지한다. -> 각 자리당 0000 ~ 1111까지 표현할 수 있다.
진수 변환 방법
10진수 -> 2진수 : 10진수의 값을 2로 나눠서 몫이 1이 되어 나누어 지지 않을 때까지 나누어 준다.
-> 그 후에 몫 1과 나머지 값을 아래부터 위에 순서로 명시해준다.
-> 예) 90 -> 1011010
10진수 -> 8진수 : 10진수의 값을 8로 나눠서 남은 숫자가 1이 나올 떄까지 나눠준다.
-> 예) 90 -> 0132
10진수 -> 16진수 : 10진수의 값을 16으로 나눌 수 없을 때까지 나눠준다.
나눌 수 없을때 몫을 0x앞에 나머지를 몫의 뒤에 명시해준다.
-> 예) 90 -> 0x5A
8진수, 16진수 -> 2진수 : 각 진수의 결과 값을 2진수로 풀어서 계산해본다.
-> 8진수 예) 0132 = 1011010 -> 90
-> 16진수 예) 0x5A = 1011010 -> 90
연산자
-> 연산 후 결과를 반환하는 것
연산자 종류
산술 연산자
+, -, *, /, % -> 이항 연산자
대입 연산자
= -> 이항 연산자 -> 대입 연산자 기준 양 항은 같은 타입의 자료형이어야 한다. -> 대입은 우측에서 좌측으로 이루어진다. -> 연산자는 연산 후 결과를 반환하기 때문에 연속 대입이 가능하다.
sizeof연산자
자료형이나 변수가 할당된 공간에 크기를 알아보기 위해 사용한다. -> sizeof 연산자를 이용할 경우 자료형 또는 변수의 크기를 byte단위로 확인할 수 있다. -> 예) cout << sizeof(char) << endl; cout << sizeof(int) << endl; -> 한가지 더 예를 들어보면 -> 자료형 char에 a와 b라는 변수명을 지어주고 a 값은 'A' b는 'B'로 지어준다 -> 그럼 여기서 sizeof로 크기를 확인하면 4가 나오게 된다. -> 왜냐하면 char에는 결과 값이 정수 값으로 저장이 되기 때문이다.
논리 연산자
&&(and) -> 이항 연산자 -> 피 연산자로 조건을 취한다. -> 두 조건을 만족하는 경우, 또는 하나만 만족하는 경우 등을 판별할 때 사용한다. -> 두 조건이 모두 참이어야 참이다. -> 하나라도 거짓일 경우 거짓이 된다. -> 단, 시작부터 거짓이 올 경우 다음 연산은 수행하지 않는다.
||(or) -> 이항 연산자 -> 둘 중 하나라도 참이면 참. -> 둘 다 거짓이어야만 거짓이 된다. -> 시작부터 참이 올 경우 다음 연산은 수행하지 않는다.
!(not) -> 단항 연산자 -> 논리 부정 -> 참과 거짓을 서로 바꾼다( true -> false, false -> true )
비트단위 연산자
-> 이항 연산자 -> 논리 연산을 수행한다. -> 단, 비트 단위로 수행한다. -> &(AND), |(OR), ^(XOR), !(NOT)
&(AND) -> 논리 연산자의 AND와 동일한 역할을 수행한다. -> 단, 비트 단위로 비교를 한다. -> 둘 다 1일 경우 참
|(OR) -> 둘 중 하나라도 1일 경우 참, 둘 다 0일 경우 거짓
^(XOR) -> 두 비트가 같으면 0, 다르면 1
~(NOT) -> 0과 1을 서로 바꿔준다. -> 1의 보수와 같다.
비트 단위 쉬프트 연산자
<<, >> -> 이항 연산자 -> 본 기능은 쉬프트 연산자 이지만 cout / cin과 만나면 입출력 연산자로 사용이 된다. -> 좌측 피 연산자의 모든 비트열을 << / >> 방향으로 우측 피 연산자의 값 만큼 이동시킨다. -> 단, 표현할 수 있는 비트를 넘어가면 값이 소실될 수 있다. -> 또한, 부호비트가 변경될 수 있다. -> <<은 n * 2^n 이고, >>은 n / 2^n이다. -> 쉬프트 연산자는 정수만 연산이 가능하다.
n / 2 와 n >> 1의 차이 / 가 * 보다 속도가 무려 10배 가까이 차이가 난다고 함 속도가 빠른 순 << -> >> -> * -> /
정수를 표현할 때는 쉬프트 연산자를 사용하면 좋다.(속도 때문에) 실수를 표현할 때는 어쩔 수 없이 /, * 연산자를 사용한다.
사용 예) bitset<8> a = 10, b = 0 b = a << 3;
축약 연산자
+=, -=, *=, /=, %=, <<=, >>= 등 -> 코드의 간결화를 위해서 사용한다.
증감 연산자
++, -- -> 피 연산자의 값을 1 증가 혹은 1 감소 시켜주는 연산자 -> 단, 증감 연산자가 피 연산자 앞 또는 뒤에 붙을 경우 다르게 작동한다.
전위 증감 -> 선 증감 후 연산 ++i
후위 증감 -> 선 연산 후 증감 i++
전위 증감과 후위 증감의 차이점 -> 전위 증감은 본인이 증가 후 본인을 통해 연산을 수행한다. -> 후위 증감은 본인과 동일한 임시 객체를 만든 후 본인은 증가 임시 객체는 연산에 반영한다. -> 전위, 후위 둘 다 사용해도 무관할 경우 전위 연산자가 더 빠르다.
단항 연산자
피 연사자 1개
이항 연산자
피 연사자 2개
삼항 연산자
피 연사자 3개 -> 조건 ? 참일 경우 수행 : 거짓일 경우 수행
bitset -> 정수를 데이터로 취한다. -> 받은 정수를 2진수로 변환한 값을 보여준다. -> 단, bitset을 사용하기 위해서는 #include <bitset> 의 추가가 필요하다. 사용 예) bitset<?> : ?에 비트를 입력한다.