hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리

C++ 정리 -4 (const μ œν•œμž, lvalue, λΆ€λ™μ†Œμˆ˜μ μˆ˜ν˜•, setf(), λ°μ΄ν„°ν˜• λ³€ν™˜)

2019. 6. 15. 15:29
728x90

const μ œν•œμž

const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λ©΄ #defineλ¬Έ 보닀 더 μ‰½κ²Œ 기호 μƒμˆ˜λ₯Ό λ‹€λ£° 수 μžˆλ‹€.

ex) const int MONTHS = 12;

//μ΄μ œλΆ€ν„° ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ 12 λŒ€μ‹ μ— MONTHSλ₯Ό μ‚¬μš© κ°€λŠ₯

//μ»΄νŒŒμΌλŸ¬λŠ” 이후에 MONTHS의 값을 λ³€κ²½ν•˜λ €λŠ” μ–΄λ– ν•œ μ‹œλ„λ„ λΆˆν—ˆμš©

//-> μ‹œλ„ν•  경우 lvalueκ°€ ν•„μš”ν•˜λ‹€λŠ” μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 보냄

 

lvalue : λŒ€μž… μ—°μ‚°μžμ˜ μ™Όμͺ½μ— 올 수 μžˆλŠ” λ³€μˆ˜μ™€ 같은 것

 

μƒμˆ˜λ₯Ό λ§Œλ“œλŠ” 일반적 ν˜•μ‹

const λ°μ΄ν„°ν˜• μƒμˆ˜ 이름 = κ°’;

 

const μƒμˆ˜λŠ” μ„ μ–Έν•  λ•Œ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ λ³€κ²½ν•  수 μ—†λŠ” λ―Έν™•μ • κ°’μœΌλ‘œ 남겨진닀.

const int toes; //이 μ‹œμ μ—μ„œ toes의 값은 λ―Έν™•μ •

toes = 10; //λ„ˆλ¬΄ 늦게 μ΄ˆκΈ°ν™”ν•¨

 

#define보닀 constκ°€ 더 쒋은 이유

1. λ°μ΄ν„°ν˜•μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ • κ°€λŠ₯

2. c++의 ν™œλ™λ²”μœ„ κ·œμΉ™μ— μ˜ν•΄ κ·Έ μ •μ˜λ₯Ό νŠΉμ • ν•¨μˆ˜λ‚˜ νŒŒμΌμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ œν•œ κ°€λŠ₯

3. λ°°μ—΄, ꡬ쑰체 같은 λ°μ΄ν„°ν˜•μ— const μ‚¬μš© κ°€λŠ₯ 

 

λΆ€λ™μ†Œμˆ˜μ μˆ˜ν˜• 

μ†Œμˆ˜λΆ€κ°€ μžˆλŠ” 수, 맀우 큰 수, 맀우 μž‘μ€ 수λ₯Ό λ‚˜νƒ€λ‚Ό 수 있으며, λ‚΄λΆ€μ μœΌλ‘œ μ •μˆ˜ν˜•κ³ΌλŠ” λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ‚˜νƒ€λƒ„

 

λΆ€λ™μ†Œμˆ˜μ μˆ˜ν˜•μ˜ μ’…λ₯˜

float, double, long double

 

c++ 이 λΆ€λ™μ†Œμˆ˜μ μˆ˜λ₯Ό ν‘œκΈ°ν•˜λŠ” 방법

1. μΌμƒμƒν™œμ—μ„œ μ‚¬μš©ν•˜λŠ” ν‘œκΈ°λ²• 12.34

2. μ§€μˆ˜ ν‘œκΈ° 3.45E6 (3.45λŠ” κ°€μˆ˜μ΄κ³  6은 μ§€μˆ˜) = 3.45에 1000000을 κ³±ν•˜λΌλŠ” 뜻

 

setf()

정밀도λ₯Ό 더 잘 비ꡐ κ°€λŠ₯ν•˜κ²Œ κ³ μ •μ†Œμˆ˜μ  ν‘œκΈ°λ‘œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•œ 것

ν”„λ‘œκ·Έλž¨μ΄ 큰 값을 좜λ ₯ν•  λ•Œ μ§€μˆ˜ ν‘œκΈ°λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , μ†Œμˆ˜μ  μ•„λž˜ 6μžλ¦¬κΉŒμ§€ ν‘œμ‹œ κ°€λŠ₯ν•˜κ²Œ 함

λ§€κ°œλ³€μˆ˜ ios_base::fixed와 ios_base::floatfieldλΌλŠ” iostream을 포함

cout.setf(ios_base::fixed, ios_base::floatfield); // μ‚¬μš©λ²•

 

λΆ€λ™μ†Œμˆ˜μ ν˜• μƒμˆ˜

8.24 λ‚˜ 2.4E8κ³Ό 같은 λΆ€λ™μ†Œμˆ˜μ ν˜• μƒμˆ˜λŠ” 기본적으둜 doubleν˜•μœΌλ‘œ μ €μž₯됨.

λΆ€λ™μ†Œμˆ˜μ ν˜• μƒμˆ˜λ₯Ό floatν˜•μœΌλ‘œ μ €μž₯ν•˜λ €λ©΄ f λ‚˜ Fλ₯Ό μ ‘λ―Έμ–΄λ‘œ, long double ν˜•μœΌλ‘œ μ €μž₯ν•˜κ³  μ‹ΆμœΌλ©΄

lμ΄λ‚˜ L μ‚¬μš©

 

λΆ€λ™μ†Œμˆ˜μ μˆ˜μ˜ μž₯단점

μž₯점 1. μ •μˆ˜μ™€ μ •μˆ˜ 사이에 μžˆλŠ” 값을 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

        2. μŠ€μΌ€μΌμ„ μ‚¬μš©ν•˜μ—¬ 맀우 큰 λ²”μœ„μ˜ 값을 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

단점 1. 수치 μ—°μ‚° 보쑰 ν”„λ‘œμ„Έμ„œκ°€ μ—†λŠ” μ»΄ν“¨ν„°μ—μ„œ μ •μˆ˜ 연산보닀 속도가 느림.

       2. 정밀도λ₯Ό μžƒμ„ 수 μžˆλ‹€.

 

λ°μ΄ν„°ν˜• λ³€ν™˜

1. νŠΉμ • λ°μ΄ν„°ν˜•μ˜ λ³€μˆ˜μ— λ‹€λ₯Έ λ°μ΄ν„°ν˜•μ˜ 값을 λŒ€μž…ν–ˆμ„ λ•Œ

2. μˆ˜μ‹μ— 데이터λ₯Ό ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν–ˆμ„ λ•Œ

3. ν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜λ₯Ό 전달할 λ•Œ

 

λŒ€μž… κ΅¬λ¬Έμ—μ„œμ˜ λ°μ΄ν„°ν˜• λ³€ν™˜

c++μ—μ„œλŠ” μ–΄λ–€ λ°μ΄ν„°ν˜•μ˜ 값을 λ‹€λ₯Έ λ°μ΄ν„°ν˜•μ˜ λ³€μˆ˜μ— λŒ€μž…ν•  λ•Œ κ·Έ 값은 λŒ€μž…λ  λ³€μˆ˜μ˜ λ°μ΄ν„°ν˜•μœΌλ‘œ λ³€ν™˜λ¨.

예λ₯Ό λ“€μ–΄ so_long이 longν˜•μ΄κ³  thirtyκ°€ shortν˜•μ΄λΌκ³  ν•  λ•Œ 

so_long = thirts; //longν˜• λ³€μˆ˜μ— shortν˜• κ°’ λŒ€μž…

thirty의 shortν˜• 값을 longν˜• κ°’μœΌλ‘œ ν™•μž₯ν•˜μ—¬ so_long에 λŒ€μž… (μ›λž˜μ˜ thirtyλŠ” λ³€κ²½λ˜μ§€ μ•ŠμŒ)

 

λ°μ΄ν„°ν˜• λ³€ν™˜

double -> float 와 같이 큰 λΆ€λ™μ†Œμˆ˜μ ν˜•μ„ μž‘μ€ λΆ€λ™μ†Œμˆ˜μ ν˜•μœΌλ‘œ 정밀도(유효숫자)κ°€ μ†μ‹€λœλ‹€. μ›λž˜ 값이 λ³€ν™˜λ°μ΄ν„°ν˜•μ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  경우, κ²°κ³Ό 예츑 λΆˆκ°€

λΆ€λ™μ†Œμˆ˜μ ν˜•μ„ μ •μˆ˜ν˜•μœΌλ‘œ

μ†Œμˆ˜λΆ€λ₯Ό μžƒμ–΄λ²„λ¦Ό. μ›λž˜ 값이 λ³€ν™˜ λ°μ΄ν„°ν˜•μ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  경우, κ²°κ³Ό 예츑 λΆˆκ°€
long -> short 와 같이 큰 μ •μˆ˜ν˜•μ„ μž‘μ€ μ •μˆ˜ν˜•μœΌλ‘œ μ›λž˜ 값이 λ³€ν™˜λ°μ΄ν„°ν˜•μ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚  경우, λŒ€κ°œ ν•˜μœ„ λ°”μ΄νŠΈλ“€λ§Œ 볡사됨

 

{}λ₯Ό μ‚¬μš©ν•  경우의 μ΄ˆκΈ°ν™” λ³€ν™˜

λ³€μˆ˜ν˜•μ΄ λŒ€μž…λœ κ°’μœΌλ‘œ ν‘œν˜„ν•  수 없을 경우 리슀트 μ΄ˆκΈ°ν™”λŠ” narrowing을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

예λ₯Ό λ“€μ–΄, λΆ€λ™μ†Œμˆ˜μ ν˜•μ„ μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•  경우 narrowing을 λΆˆν—ˆμš©

λ§Œμ•½, λ³€ν™˜λœ λ³€μˆ˜κ°€ μ™„λ²½ν•˜κ²Œ 값을 μœ μ§€ν•  수 μžˆλ‹€λ©΄ ν—ˆμš© κ°€λŠ₯

ex)

const int code = 66;

int x=66;

char c1{31325}; //narrowing, λΆˆν—ˆμš©

char c2={66}; //charκ°€ 66 μœ μ§€ κ°€λŠ₯ν•˜λ―€λ‘œ ν—ˆμš©

char c3={code}; //μƒμˆ˜ν˜• int λ³€μˆ˜ code 66 ν—ˆμš©

char c4={x}; //xκ°€ μƒμˆ˜κ°€ μ•„λ‹ˆμ–΄μ„œ ν—ˆμš© x

x=31325;

char c5=x; //μ΄ˆκΈ°ν™” ν—ˆμš© {}λ₯Ό μ‚¬μš©ν•  경우의 μ΄ˆκΈ°ν™”κ°€ μ•„λ‹˜

 

μ»΄νŒŒμΌλŸ¬λŠ” xλŠ” λ³€μˆ˜μ΄κ³  맀우 큰 값을 κ°€μ§ˆ 수 μžˆλ‹€ 생각함.

xκ°€ μ΄ˆκΈ°ν™”λ˜κ³  c4κ°€ xλ₯Ό μ΄μš©ν•΄ μ΄ˆκΈ°ν™”λ˜κΈ°κΉŒμ§€ xκ°€ μ–΄λ–€ κ°’μœΌλ‘œ λ³€ν™”λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것은 컴파일러의 역할이 μ•„λ‹˜.

 

μˆ˜μ‹μ—μ„œμ˜ λ°μ΄ν„°ν˜• λ³€ν™˜

1. μ–΄λ–€ λ°μ΄ν„°ν˜•μ€ 그듀이 λ‚˜νƒ€λ‚  λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ λ°μ΄ν„°ν˜•μ΄ λ³€ν™˜λ¨

2. μ–΄λ–€ λ°μ΄ν„°ν˜•μ€ μˆ˜μ‹μ—μ„œ λ‹€λ₯Έ λ°μ΄ν„°ν˜•κ³Ό ν˜Όν•©ν•˜μ—¬ μ‚¬μš©λ˜μ—ˆμ„ λ•Œ λ°μ΄ν„°ν˜•μ΄ λ³€ν™˜λ¨

 

μžλ™ λ°μ΄ν„°ν˜• λ³€ν™˜

μ–΄λ–€ μˆ˜μ‹μ˜ 값을 평가할 λ•Œ bool, char, unsigned char, signed char, shortν˜• 값은 λͺ¨λ‘ intν˜•μœΌλ‘œ λ³€ν™˜λ¨ (이λ₯Ό μ •μˆ˜ μŠΉκΈ‰μ΄λΌ 함)

trueλŠ” 1, falseλŠ” 0으둜 λ³€ν™˜λ¨.

ex)

short chickens = 20;

short ducks = 35;

short fowl = chickens+ducks; // 1. chickens와 ducks의 값을 intν˜•μœΌλ‘œ 각각 λ³€ν™˜λœ ν›„ 더함

                                          2. λ”ν•œ κ²°κ³Όλ₯Ό shortν˜•μœΌλ‘œ λ‹€μ‹œ λ³€ν™˜ν•˜μ—¬ shortν˜• λ³€μˆ˜ fowl에 λŒ€μž…

                                          --> 컴퓨터가 intν˜•μ— λŒ€ν•΄ κ°€μž₯ λΉ λ₯΄κ²Œ 계산을 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έ

 

μ„œλ‘œ λ‹€λ₯Έ λ°μ΄ν„°ν˜•μ„ ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•  λ•Œ μΌμ–΄λ‚˜λŠ” λ°μ΄ν„°ν˜• λ³€ν™˜

ν•˜λ‚˜μ˜ 연산에 두 κ°€μ§€ λ°μ΄ν„°ν˜•μ΄ λ“€μ–΄μžˆμœΌλ©΄ μž‘μ€ 크기의 λ°μ΄ν„°ν˜•μ΄ 큰 크기의 λ°μ΄ν„°ν˜•μœΌλ‘œ λ³€ν™˜λ¨.

ex) 9.0을 5둜 λ‚˜λˆŒ λ•Œ 9.0이 doubleν˜•μ΄κΈ° λ•Œλ¬Έμ— λ‚˜λˆ—μ…ˆ 연산을 μˆ˜ν–‰ν•˜κΈ° μ „, intν˜•μΈ 5κ°€ double ν˜•μœΌλ‘œ λ³€ν™˜λ¨.

 

λ°μ΄ν„°ν˜• λ³€ν™˜μž

thornλ³€μˆ˜μ— μ €μž₯된 intν˜• 값을 longν˜•μœΌλ‘œ κ°•μ œλ‘œ λ³€ν™˜ν•˜λ €λ©΄,

1. (long) thorn //thorn의 longν˜• λ³€ν™˜ 리턴

2. long (thorn) //thorn의 longν˜• λ³€ν™˜ 리턴

λ°μ΄ν„°ν˜• λ³€ν™˜μžλŠ” thorn λ³€μˆ˜ μžμ²΄λŠ” λ³€κ²½ν•˜μ§€ μ•ŠμŒ

 

일반적 μ‚¬μš©λ²• //valueλ₯Ό typeNameν˜•μœΌλ‘œ κ°•μ œ λ³€ν™˜

1. (typeName) value

2. typeName (value)

3.static_cast<typeName> (value)

ex)

int auks, bats, coots;

auks = 19.99+11.99; //31.98 -> 31 λŒ€μž… (int ν˜•μ΄λ―€λ‘œ)

coots = int (19.99) + int (11.99); //19+11=30

 

char ch = 'Z';

cout<<int(ch)<<endl;

cout<<static_cast<int>(ch)<<endl;

cout<<ch;

--> κ²°κ³Ό

90

90

Z

 

λ°μ΄ν„°ν˜• λ³€ν™˜μžλ₯Ό μ‚¬μš©ν•˜λŠ” 두 κ°€μ§€ 이유

1. doubleν˜•μœΌλ‘œ μ €μž₯ν•˜μ§€λ§Œ intν˜•μœΌλ‘œ 계산해야 ν•˜λŠ” 값듀에 μ‚¬μš©

-> 인ꡬ수처럼 λΆ€λ™μ†Œμˆ˜μ μˆ˜λ“€μ„ μ •μˆ˜ κ°’μœΌλ‘œ λͺ¨λΈλ§ν•΄μ•Ό ν•˜λŠ” 계산

2. νŠΉμ • λͺ©μ μ— 맞게 κ°•μ œλ‘œ λ°μ΄ν„°ν˜• λ³€ν™˜

 

 

 

728x90
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 -6 (getline(), get(), failbit, string 클래슀, λ©”μ„œλ“œ)
    • C++ 정리 -5 (auto μ„ μ–Έ, λ°°μ—΄, λ¬Έμžμ—΄)
    • C++ 정리 -3 (μ΄ˆκΈ°ν™”, unsigned ν˜•, μ •μˆ˜ν˜• μƒμˆ˜,진법을 λ°”κΎΈλŠ” μ‘°μ •μž, char, bool ν˜•)
    • C++ 정리 -2 (슀트림, 좜λ ₯, μž…λ ₯, cout, cin, μ •μˆ˜ν˜•)
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”