진수란?

-> 숫자를 표현하는 방법

 

진수의 종류

10진수 0 ~ 9까지 총 10개의 숫자를 표현할 수 있다.
-> 보통 사용하는 숫자 표현
2진수 0과 1 두 가지만 사용하여 표현할 수 있다. 
-> 기계어가 2진수로 되어 있다.
8진수 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<?> : ?에 비트를 입력한다.

-> 4비트로 표시하고 싶을 때

-> bitset<4> A = 5, A = 6;

 

+ Recent posts