언어공부/C++

[ C++ ] 기초 정리 2. 자료형과 연산자

기싼 2022. 7. 18. 15:22

열혈강의 C++언어본색 책을 보면서 정리한 자료입니다.

 

CHAPTER 2. 자료형과 연산자

 

2.1 변수와 상수

 

Def . 프로그래밍

         자료를 저장하고 더하거나 비교하는 등의 연산을 하여 자료를 처리하는 과정.

         프로그래밍의 기본은 자료형과 연산자들이다.

 

Def . 변수

         프로그램이 처리한 처리대상 또는 처리 결과를 저장하는 주 기억장치의 특정 위치

 

변수는 이름을 지정할 때 특정 규칙들이 있다.

  • 영문 소,대문자, 숫자, 밑줄(_)으로만 이름을 지정 가능 // 띄어쓰기 불가능
  • 숫자는 변수 이름의 첫 글자에 들어갈수 없다
  • 영문 소문자와 대문자는 구별이 된다
  • 예약어는 변수 이름으로 사용 불가능 // 예약어 : 컴퓨터 언어에서 이미 약속된 단어
  • 변수 이름 길이에는 제한이 없다

 

-      프로그래밍을 할 때는 우리가 사용하는 일반적인 단어로 하는 것이 아닌 컴퓨터의 언어로 진행을 해야 한다. 이때 사용하는 단어는 크게 두가지 이다. 예약어사용자 정의어로 구분이 된다. 예약어는 이미 컴퓨터 언어에서 약속된 단어이고 사용자 정의어는 말 그대로 사용자가 필요에 의해 정하는 것으로, 예약어는 사용자 정의어로 사용할 수 없다. 변수는 사용자 정의어에 해당이 된다.

 

 

Def . 상수

  • 기억 장소에 저장되는 값으로 변수에 저장될 수도 있고 프로그램 코드 내에서 별도의 변수 할당 없이 사용될 수도 있다.
  • 상수의 종류에는 문자와 숫자로 나누어진다. 숫자는 일반적인 표기법을 따르지만 문자의 경의 작은따옴표(‘’)로 묶어서 표기하고 문자열은 큰따옴표(“”)로 묶어서 표기한다.

 

Def . 선언

  • 변수를 사용하기 전에 이를 알리는 작업이다. 변수가 어떤 종류의 데이터를 가지는지 유형을 설명하는 작업이다.

 

 

2.2 컴퓨터가 표현하는 데이터

  • 프로그램을 작성할 떄 가장 먼저 해야 할 일은 대상 데이터를 저장할 변수와 저장되는 데이터의 성격을 결정하는 것이다. ‘성격’이란 데이터 특성에 따른 컴퓨터의 표현이나 저장 방식으로, 숫자인가 문자인가 또는 숫자라면 소수점이 있는 형태인가 아닌가 등을 구분하는 것이다.
  • 기억해야 할 것은 문자는 (‘’) 또는 (“”)로 묶어서 표기했다는 것이다.

 

Def . 자료형 ( 데이터 형 Data Type )

         데이터 특성에 따른 컴퓨터의 표현이나 저장 방식을 설명하는 형식

 

 

아래 표는 C++에서의 대표적인 자료형의 예약어다.

표기 내용 크기
Char 문자 1Byte = 8Bit
Double 배정도형 실수 8Byte = 64Bit
Float 단정도형 실수 4Byte = 32Bit
int 정수 ( 컴퓨터 언어에서의 기본! ) 4Byte = 32Bit

 

  • 자료형간의 연산 결과

         같은 자료형의 연산 = 같은 자료형의 결과를 얻는다.

         서로 다른 자료형의 연산 = 기억장소 크기가 더 큰 자료형의 결과를 얻는다.

         즉 컴퓨터 자료형에 따라 데이터의 표현 방법과 연산 결과가 달라진다.

 

 

2.3 기본 자료형

  • 컴퓨터 언어의 변수도 데이터 담을 수 있는 크기가 있다. 그 범위를 넘으면 정확한 값을 표현하지 못한다. 즉 변수의 크기에 따라 사용할 자료형이 구분이 된다.
표기 내용 크기 예시
Char 문자 1Byte = 8Bit ‘A’
Unsigned char ??????? 1Byte = 8Bit ???????
Double 배정도형 실수 8Byte = 64Bit +-3.54326
Long double 긴 배정도형 실수 8Byte = 64Bit +-3.543154743
Float 단정도형 실수 4Byte = 32Bit +-7467.1
int 정수 ( 컴퓨터 언어에서의 기본! ) 4Byte = 32Bit +-984
Short int 짧은 정수 2Byte = 16Bit +-45
Long int 긴 정수 4Byte = 32Bit +-5643
Unsigned int 부호 없는 정수 4Byte = 32Bit 872
Unsigned short int 부호 없는 짧은 정수 2Byte = 16Bit 43
Bool 논리형 연산자 1Byte = 8Bit 1(true), 0(false)

주의 해야 할 점은 소수점이 있는 상수는 배정도형 실수 (Double) 을 기본으로 한다. 즉 선언을 안 해도 자동으로 Double로 인식

 

 

2.4 변수의 자료 범위

  • 변수의 크기에 맞지 않은 자료를 입력하면 에러가 아닌 화면에 예상치 못한 값이 나온다.
  • 최대값을 넘는 경우 다시 최솟값부터 진행이 된다.
  • 해당 변수가 다룰 데이터의 범위가 적절한지를 꼭! 잘 판단해야 한다. 이를 해결하기 위해 형 변환이라는 작업이 있다.

 

 

2.5 형변환

  • 정수형 값은 배정 도형 변수(double, float)에 할당이 가능하다. 따로 형 변환 필요 없이 가능은 하지만. 결과는 정수형의 결과를 실수형으로 표현한 데이터가 손실되어 표현된다.
  • 즉 a=3, b=20 / float = c  여기서 c=b/a 를 진행하면 c=6.00000이 표현된다.
  • 이러한 현상을 대비하기 위해 우리는 형 변환이 필요하다.
  • 즉 오른쪽의 수식 결과를 왼쪽의 변수 자료형에 맞게 변환 작업을 하는 것이다.
  • 방법은 그냥 c=b/(float) a 또는 c=b/af이라고 언급하면 끝이다.

 

Def . 명시적 형변환 ( Type Conversion )

  • 일시적으로 형을 변환시키는 방법이다. 즉 수식 결과를 변수 자료형에 맞게 일시적으로 수식을 변환시키는 방법!

 

2.6 연산자

2.6.1 입출력 연산자

표기 내용 예시
Cout 출력 연산자 Cout << 출력내용;
Cin 입력 연산자 Cin >> 입력내용;
  • 리다이렉션 기호인 <<, >> 이것들은 입출력 방향을 전환하라는 말이다. << 기호는 오른쪽의 내용을 왼쪽 장치로 입출력 방향을 결정한 것이다. 즉 cout << “메롱”; 은 cout 장치로 메롱을 보내라는 내용이다.

 

2.6.2 산술 연산자

표기 내용 예시
* 곱하기 3*6
/ 나누기 3/6
+ 더하기 3+6
- 빼기 3-6
% 나머지를 구하는 연산자 3%2
  • 산술 연산자는 이항 연산자 ( 두개의 연산대상을 필요로 하는 연산자 ) 이다.

 

 

 

2.6.3 변수 초기화와 단축 연산자

 

Def. 변수 초기화 ( initialization )

  • 특정 변수에다가 값을 넣어 주는 작업이다. 즉 데이터를 넣어주는 작업이다.
  • 이때 주의해야할 점은 변수 속에 이전에 사용했던 데이터 즉 쓰레기 값이 남아 있는데 연산자를 통해 명령을 수행한다면 ( ex. A+1 / 이때 A는 초기화 X ) 에러가 나온다.

 

 

 Def. 단축 연산자

  •    누적 연산 수식을 간략하게 표현하기 위해 사용하는 연산자
표기 내용 예시
*= 곱셈 누적 A*=3 : A3을 곱한다.
/= 나누기 누적 A/=3 : A3을 나눈다.
+= 더하기 누적 A+=3 : A3을 더한다.
-= 빼기 누적 A-=3 : A3을 뺀다.
%= 나머지 누적 A%=3 : 3의 나머지 구한다
++ 1 누적 A++ : A1을 더한다
-- 1 감소 A--  : A1을 뺀다
  • 이때 ++ 와 – 연산자는 변수의 앞에 올 수도 있고 뒤에 올 수도 있다. 앞에 오는 경우 즉 ++가 전치 연산자가 되는 경우에는 변수 사용 전 1을 더하는 작업을 진행한다.  뒤에 오는 경우 즉 ++가 후치 연산자가 되는 경우에는 변수 사용 후 1을 더하는 작업을 진행한다.

 

 

2.6.4 논리형 그리고 관계 연산자, 논리 연산자

  • 우리가 앞서 배운 자료형에는 논리형이라는 것이 있다. 대표적으로 bool이 있는데 이 자료형은 데이터를 true, false 즉 1과 0으로만 표현을 한다. 그렇다면 자료형 범위는 1Bit가 충분하다. 하지만 컴퓨터 자료표현은 1Byte로 이루어지기 때문에 크기는 1Byte가 된다.
표기 내용 크기 예시
Bool 논리형 연산자 1Byte = 8Bit 1(true), 0(false)

여기서 Bool0이 아닌 자료는 모두 true로 표현한다.  ( 컴퓨터 구조 수업을 들으면 그 이유를 알수있음.. )

 

 

Def. 관계 연산자

  •    산술 연산자 외에 ‘크거나 같다’와 같이 크기를 비교하는 연산자
표기 내용 예시
>, < 크다, 작다 10>3 : 결과는 true
>=, <= 크거나 같다, 작거나 같다 10>= 10 : 결과는 true
== 같다 ( = 하나만 쓰면 할당의 의미 ) 10==9 : 결과는 false
!= 다르다 10!=10 결과는 falsa

 

Def. 논리 연산자

  •    두개 이상의 연산 결과에 대해 연산 결과 간의 관계에 대한 논리를 판단하는 연산자
표기 내용 예시
&& 논리곱 (AND) 조건의 결과가 같아야 true (10>3)&&(10<3) : 결과는 false
|| 논리합 (OR) 조건중 하나만 true true (3>10)||(10>3) : 결과는 true
! 논리 부정 (NOT) 하나의 항목에 대해 연산을 수행하며 부정의 의미 !3 : 결과는 false
왜냐면 30이 아니므로 true인데 부정 false

 

2.6.5 비트 연산자

  • 컴퓨터의 자료 표현은 바이트 단위로 수행된다. 반면 비트 연산자는 연산 단위가 자료형에 상관없이 비트 단위(2진수)로 수행이 된다.
  • 비트 연산자를 사용할 때 자료 값 확인을 위해 2진법을 사용하게 되면 표현 자릿수가 길어지므로 16진법을 사용한다.
  • 비트 연산자가 필요한 이유는 컴퓨터의 기본 단위인 비트를 통해서 바로 연산을 이용해서 훨씬 빠르기 때문이다.

진법 표현

표기 내용 예시
HEX 16진법 출력 Cout << hex << a; : a16진수로 출력
Dex 10진법 출력 Cout << dex << a; : a10진수로 출력
0x 16진법 표기 0x1243 : 10진법의 1243이 아닌 16진법의 1243

 

비트 연산자

표기 내용 예시
>>  오른쪽 시프트 111>>2 : 1112진수로 나타내고 오른쪽으로 2비트 이동
<<  왼쪽 시프트 111<<2 : 1112진수로 나타내고 왼쪽으로 2비트 이동
& 비트 논리곱 비트 단위(2진수)로 논리곱 수행
| 비트 논리합 비트 단위(2진수)로 난리합 수행
^ 비트 배타적 논리합 (NOR) 비트 단위(2진수)로 배타적 논리합 수행
서로 다른값은 참, 같으면 거짓
~ 비트 논리부정 비트 단위(2진수)로 부정 수행
  • 이때 주의해야 할 점은 시프트 할 때 이동되어서 없어지는 부분도 있고 새로 추가되는 부분도 생긴다. 새롭게 생기는 부분에는 0으로 채워진다.
  • 또한 결과를 나타낼 때 32비트에서 0번째 비트 ( 2진수의 가장 앞부분 )이 1이면 음수이다.

 

2.7 연산자 우선순위

  • 연산자의 우선순위는 크게 산술 연산자, 관계 연산자, 논리 연산자 순이다. 비트 연산자의 경우 관계 연산자와 논리 연산자 중간에 위치하나 단항 연산자에 해당하는 ~는 산술 연산자보다 앞서 수행된다. 또한, 소괄호는 단항 연산자를 제외한 다른 연산자보다 우선된다.
  • 쉽게 이야기하자면 전치 연산자보다 후치 연산자가 우선적이며, 단항 연산자는 복항 연산자보다 우선적이다. 그리고 산술 <- 관계 <- 논리 순이다.