C Programming Language/C++

C++ νƒ€μž…κ³Ό μˆ˜μ‹μ— λŒ€ν•΄ ν•™μŠ΅ν•˜κΈ° (1)

567Rabbit 2024. 8. 14. 17:54

cout 

- printf와 λΉ„μŠ·ν•˜λ‹€.

- ν‘œμ€€ 좜λ ₯ 슀트림 객체둜, μ½˜μ†”μ— 데이터λ₯Ό 좜λ ₯ν•˜λŠ” 데 μ‚¬μš©λ¨

- cout은 슀트림 μ—°μ‚°μž <<λ₯Ό μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•  데이터λ₯Ό μ§€μ •ν•œλ‹€

 

 

cin

- scanf와 λΉ„μŠ·ν•˜λ‹€.

- ν‘œμ€€ μž…λ ₯ 슀트림 객체둜, μ‚¬μš©μžλ‘œλΆ€ν„° 데이터λ₯Ό μž…λ ₯λ°›λŠ” 데 μ‚¬μš©

- μž…λ ₯ μ—°μ‚°μž >>λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μž…λ ₯λ°›λŠ”λ‹€.

 

 

 

λ¦¬ν„°λŸ΄ (literal)

ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” κ°’ 자체λ₯Ό λ§ν•œλ‹€.

C++μ—μ„œ λ¦¬ν„°λŸ΄(literal)은 μ½”λ“œμ—μ„œ μ§μ ‘μ μœΌλ‘œ 값을 ν‘œν˜„ν•˜λŠ” ν‘œκΈ°λ²•μ΄λ‹€.

λ¦¬ν„°λŸ΄μ€ λ³€μˆ˜λ‚˜ μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•  수 있으며, λ°μ΄ν„°μ˜ ꡬ체적인 값을 μ½”λ“œμ— 직접 μž‘μ„±ν•  λ•Œ μ‚¬μš©λœλ‹€.

cpp
λ‹«κΈ°
#include <iostream> int main() { ​​​​// μ •μˆ˜ λ¦¬ν„°λŸ΄ ​​​​int decimal = 42; ​​​​int octal = 052; // 8μ§„μˆ˜ ​​​​int hex = 0x2A; // 16μ§„μˆ˜ ​​​​// μ‹€μˆ˜ λ¦¬ν„°λŸ΄ ​​​​double float1 = 3.14; ​​​​double float2 = 1.23e4; // μ§€μˆ˜ ν‘œκΈ°λ²• ​​​​// 문자 λ¦¬ν„°λŸ΄ ​​​​char character = 'a'; ​​​​char newline = '\n'; ​​​​// λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ ​​​​const char* str = "Hello, World!"; ​​​​// λΆ€μšΈ λ¦¬ν„°λŸ΄ ​​​​bool isTrue = true; ​​​​bool isFalse = false; ​​​​// 널 λ¦¬ν„°λŸ΄ ​​​​int* ptr = nullptr; // C++11 이후 ​​​​// μ‚¬μš©μž μ •μ˜ λ¦¬ν„°λŸ΄ (예: 1s, 2min λ“±) ​​​​// (μ‚¬μš©μž μ •μ˜ λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ •μ˜λŠ” 별도) ​​​​std::cout << "Decimal: " << decimal << std::endl; ​​​​std::cout << "Octal: " << octal << std::endl; ​​​​std::cout << "Hex: " << hex << std::endl; ​​​​std::cout << "Float1: " << float1 << std::endl; ​​​​std::cout << "Float2: " << float2 << std::endl; ​​​​std::cout << "Character: " << character << std::endl; ​​​​std::cout << "String: " << str << std::endl; ​​​​std::cout << "Boolean True: " << isTrue << std::endl; ​​​​std::cout << "Boolean False: " << isFalse << std::endl; ​​​​std::cout << "Pointer: " << ptr << std::endl; ​​​​return 0; }

 

 

가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ μœ„ν•΄μ„œ λ¦¬ν„°λŸ΄ λŒ€μ‹ μ— μƒμˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€ !

 

 

 

μƒμˆ˜ (constant)

 

μƒμˆ˜κ°’μ„ μ„ μ–Έν•  λ•Œ constλ₯Ό 뢙인닀. 즉 const ν‚€μ›Œλ“œλ‘œ λ³€μˆ˜λ₯Ό μƒμˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆλ‹€. μƒμˆ˜(constant)λŠ” ν•œ 번 값이 정해지고 λ‚˜λ©΄ 값이 변경될 수 μ—†μœΌλ©° μ΄ˆκΈ°κ°’μ„ μ£Όμ–΄ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€. 

 

ex)

const float PI = 3.14F;  //μƒμˆ˜ λ³€μˆ˜ PI의 μ •μ˜

 

- 맀크둜 μ‚¬μš©λ³΄λ‹€λŠ” μƒμˆ˜ μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€. 

 

 

 

 

λ¦¬ν„°λŸ΄κ³Ό νƒ€μž…

 

 

 

 

 

νƒ€μž…

 

데이터 νƒ€μž…μ˜  μ—­ν• 

- ν•΄λ‹Ή νƒ€μž…μ— μ†ν•˜λŠ” 자료 κ°’μ˜ 집합을 결정함

- ν•΄λ‹Ή νƒ€μž…μ— μ†ν•˜λŠ” μžλ£Œμ— 적용 κ°€λŠ₯ν•œ 연산을 결정함

- 자료의 μ €μž₯ ν˜•νƒœλ₯Ό 결정함

 

 

C++ 데이터 νƒ€μž… λΆ„λ₯˜(μ’…λ₯˜)

- κΈ°λ³Έ νƒ€μž… : C++ μ–Έμ–΄κ°€ 직접 μ§€μ›ν•˜λŠ” νƒ€μž…

- μœ λ„ νƒ€μž… : λ‹€λ₯Έ νƒ€μž…μ„ 기반으둜 ν•˜μ—¬ κ΅¬μ„±λ˜λŠ” νƒ€μž…

- μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž… : ꡬ쑰체, 클래슀 λ“±

 

 

 

 

 

μ‘°μ •μž(Modifier)

 

μˆ˜μ‹μ–΄(μ‘°μ •μž)

- "μˆ˜μ‹μ–΄" λ˜λŠ” "μ‘°μ •μž" (modifier)λŠ” λ³€μˆ˜λ‚˜ λ°μ΄ν„°μ˜ 속성을 λ³€κ²½ν•˜κ±°λ‚˜, 데이터 νƒ€μž…μ„ ν™•μž₯ν•˜μ—¬ νŠΉμ •ν•œ λ™μž‘μ΄λ‚˜ νŠΉμ„±μ„ λΆ€μ—¬ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.

- μˆ˜μ‹μ–΄λŠ” λ°μ΄ν„°μ˜ 크기, λΆ€ν˜Έ, μ €μž₯ 방식 등을 μ œμ–΄ν•  수 μžˆλ‹€.

- μ£Όμš” μˆ˜μ‹μ–΄μ—λŠ” const, volatile, static, extern, mutable, constexpr, thread_local 등이 μžˆλ‹€.

- signed, unsigned, short, long은 μˆ˜μ‹μ–΄λ‘œ μ‚¬μš©λ¨

- signedλŠ” μŒμˆ˜μ™€ μ–‘μˆ˜λ₯Ό λͺ¨λ‘ ν‘œν˜„ν•  수 μžˆλŠ” μ •μˆ˜ν˜• 데이터 νƒ€μž…μ„ μ˜λ―Έν•˜κ³  unsignedλŠ” 음수λ₯Ό ν‘œν˜„ν•˜μ§€ μ•Šκ³  μ–‘μˆ˜λ§Œ ν‘œν˜„ν•  수 μžˆλŠ” μ •μˆ˜ν˜• 데이터 νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.

- 예 : short == short int = signed short

 

 

 

 

 

음수 ν‘œν˜„λ²•(two's complement)

 

MSB(Most Significant Bit)

- 0이면 μ–‘μˆ˜, 1이면 음수둜 λ‚˜νƒ€λ‚Έ

- (-1)의 ν‘œν˜„μ€ MSBλ₯Ό 1둜, λ‚˜λ²„μ§€ bitsλ₯Ό λ°˜μ „ ν›„ +1

 

Two's complementλŠ” 음수λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ΄μ§„μˆ˜μ˜ 각 λΉ„νŠΈλ₯Ό λ°˜μ „(0을 1둜, 1을 0으둜)ν•˜κ³ , 1을 λ”ν•˜λŠ” 방식

 

κ³Όμ •

  1. μ–‘μˆ˜λ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€: μš°μ„  음수λ₯Ό ν‘œν˜„ν•˜κ³ μž ν•˜λŠ” μ–‘μˆ˜λ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜
  2. λͺ¨λ“  λΉ„νŠΈλ₯Ό λ°˜μ „μ‹œν‚΅λ‹ˆλ‹€: 1을 0으둜, 0을 1둜 λ°”κΏˆ
  3. 1을 λ”ν•©λ‹ˆλ‹€: λ°˜μ „λœ 결과에 1을 더함

 

μ–‘μˆ˜ 1을 μ΄μ§„μˆ˜λ‘œ ν‘œν˜„: 1은 0000 0001 (8λΉ„νŠΈ 예λ₯Ό λ“€μ–΄)

λͺ¨λ“  λΉ„νŠΈλ₯Ό λ°˜μ „: 1111 1110

1을 λ”ν•˜κΈ°: 1111 1110 + 1 = 1111 1111

 

결과적으둜, -1의 Two's complement ν‘œν˜„μ€ 1111 1111

 

1의 Two's complement ν‘œν˜„μ€ 0000 0001, -1의 Two's complement ν‘œν˜„μ€ 1111 1111 이닀.

 

 

 

 

 

ꢌμž₯ν•˜λŠ” Good Design μ½”λ”© 방법

 

λ³€μˆ˜λŠ” μ‹€μ œλ‘œ μ‚¬μš©λ˜λŠ” μ‹œμ μ— (ν•„μš”ν•œ μ‹œμ μ— κ·Έλ•Œ κ·Έλ•Œ) μ •μ˜ν•œλ‹€. (μ‹œμž‘μ—μ„œ μ •μ˜ν•˜λŠ” 것이 μ•„λ‹ˆλΌ) 

μ‹œμž‘μ§€μ μ—μ„œ μ •μ˜ν•˜λ©΄ λ³€μˆ˜λ₯Ό μΆ”μ ν•˜λŠ” 것이 μ–΄λ ΅κΈ° λ•Œλ¬Έμ΄λ‹€.

 

 

 

 

 

 

μ‹λ³„μž(λ³€μˆ˜) λͺ…λͺ…

- μ‹λ³„μž(identifier) : λ³€μˆ˜, μƒμˆ˜, ν•¨μˆ˜, 클래슀 λ“± κ°œλ°œμžκ°€ κ²°μ •ν•œ 이름

 

 

C++ λͺ…λͺ… κ·œμΉ™

 

- μ‹λ³„μžλŠ” 영문자, 숫자, λ°‘μ€„λ‘œ ꡬ성. 단 μˆ«μžλŠ” 첫 λ¬Έμžλ‘œλŠ” μ‚¬μš©ν•˜λ©΄ μ•ˆλ¨

- μ˜λ¬ΈμžλŠ” λŒ€λ¬Έμžμ™€ μ†Œλ¬Έμžλ₯Ό ꡬ뢄함

- λŒ€/μ†Œλ¬Έμžκ°€ κ΅¬λΆ„λ˜κΈ°λŠ” ν•˜μ§€λ§Œ, λŒ€/μ†Œλ¬Έμžμ— μ˜ν•΄μ„œ κ΅¬λΆ„λ˜λŠ” μ‹λ³„μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

- ν‚€μ›Œλ“œλŠ” μ˜ˆμ•½μ–΄λ‘œμ„œ μ‹λ³„μžλ‘œμ„œ μ‚¬μš©ν•  수 μ—†λ‹€.

- λ³€μˆ˜μ˜ μ΄λ¦„λ§ŒμœΌλ‘œ μ €μž₯λ˜λŠ” κ°’μ˜ μš©λ„/역할을 μΆ”μΈ‘ν•  수 μžˆλ„λ‘ ν•΄μ•Ό ν•œλ‹€.

- ν‚€μ›Œλ“œλŠ” μ•„λ‹ˆμ§€λ§Œ, STLμ—μ„œ μ •μ˜λœ ν‘œμ€€ μ‹λ³„μžλŠ” μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

- '_' 등은 μ‹œμŠ€ν…œ ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•˜λ―€λ‘œ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€

- μΌλ°˜ν™”λ˜μ§€ μ•Šμ€ μ•½μ–΄μ˜ μ‚¬μš©μ„ μžμ œν•œλ‹€.

 

 

< μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” ν‚€μ›Œλ“œ μ’…λ₯˜ >

 

 

 

λ³€μˆ˜ μ΄λ¦„μ˜ 예

 

 

 

 

 

 

νƒ€μž…μ˜ 크기

 

 

 

<νƒ€μž…μ˜ κ°’μ˜ λ²”μœ„>  : κ°’μ˜ λ²”μœ„λŠ” λ°”μ΄νŠΈ μˆ˜μ— λ”°λΌμ„œ κ²°μ •λœλ‹€.

 

 

 

 

 

ꢌμž₯ν•˜λŠ” Good Design μ½”λ”© 방법 2 : cstdint의 μ‚¬μš© 

 

- λŒ€μƒ CPU에 λ”°λΌμ„œ νƒ€μž…μ˜ λ°”μ΄νŠΈκ°€ κ²°μ •λœλ‹€

- ex) 4λ°”μ΄νŠΈ CPUμ—μ„œμ˜ 정상 λ™μž‘ μ½”λ“œκ°€ 2λ°”μ΄νŠΈ CPUμ—μ„œλŠ” overflowκ°€ 될 수 있음

 

- λ°”μ΄νŠΈ 수λ₯Ό λͺ…μ‹œν•œ ν‘œμ€€ νƒ€μž…μ˜ μ‚¬μš©

cμ–Έμ–΄  : <stdint.h>

c++μ–Έμ–΄  :  <cstdint>

 

 

μ •μˆ˜ν˜• κ°’μ˜ λ²”μœ„

- 헀더 파일 <climits>

- INT_MAX, INT_MIN λ“±

 

μ‹€μˆ˜ν˜• κ°’μ˜ λ²”μœ„

- 헀더 파일 <cfloat>

- FLT_EPSILON, FLT_MIN, FLT_MAX 

 

 

νƒ€μž…μ˜ μ΅œλŒ€/μ΅œμ†Œκ°’

- numeric_limits<T> 클래슀λ₯Ό 톡해 μ•Œ 수 μžˆλ‹€.

 

ex)

#include <limits>

cout << numeric_limits<int>::max() << " is the maximum int\n";  ν˜Ήμ€ minμœΌλ‘œλ„ κ°€λŠ₯

 

 

 

 

 

특수 char λ¬Έμžμ—΄

 

 

- 8μ§„μˆ˜ λ¦¬ν„°λŸ΄μ€ μ‹€μˆ˜λ₯Ό μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ μ‚¬μš©μ΄ ꢌμž₯λ˜μ§€ μ•ŠλŠ”λ‹€

 

 

 

 

C++ νƒ€μž…κ³Ό μˆ˜μ‹μ— λŒ€ν•΄ ν•™μŠ΅ν•˜κΈ° (2)

C++ νƒ€μž…κ³Ό μˆ˜μ‹μ— λŒ€ν•΄ ν•™μŠ΅ν•˜κΈ° (1)cout - printf와 λΉ„μŠ·ν•˜λ‹€.- ν‘œμ€€ 좜λ ₯ 슀트림 객체둜, μ½˜μ†”μ— 데이터λ₯Ό 좜λ ₯ν•˜λŠ” 데 μ‚¬μš©λ¨- cout은 슀트림 μ—°μ‚°μž   cin- scanf와 λΉ„μŠ·ν•˜λ‹€.- ν‘œμ€€ μž…λ ₯ 슀트림 객

codebunny99.tistory.com