์ €๋ฒˆ ๊ฒŒ์‹œ๊ธ€์— ์ด์–ด์„œ C++์˜ ํƒ€์ž…(์ž๋ฃŒํ˜•)๊ณผ ์˜คํผ๋ ˆ์ดํ„ฐ(์—ฐ์‚ฐ์ž)๋ฅผ ์•Œ์•„๋ณด์ž!


2-1 ํ—ฌ๋กœ์›”๋“œ.


๊ทธ ์ „์— C++์€ C์—์„œ ์“ฐ๋˜ output์ธ printf() ํ•จ์ˆ˜์™€ C++ ๋งŒ์˜ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜์ธ cout ์„ ์“ธ์ˆ˜์žˆ๋Š”๋ฐ,

๊ทธ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๋ณด๊ณ , ๋ณธ ๋‚ด์šฉ์œผ๋กœ ๊ฐ€์ž.


์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด์„œ ํ•˜์ž.


1

2

3

4

5

6

#include <iostream>

int main(void)

{

ย ย ย std::cout << "Hello World" << std::endl;

}

Colored by Color Scripter

cs


์˜ˆ์ œ ์ฒ˜๋Ÿผ ์“ธ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์—” ์—ฌ๋Ÿฌ๊ฐ€์ง€ C++์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.


๋จผ์ € C์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ธํด๋ฃจ๋“œ ํ•ด์„œ ์“ฐ๋Š”๋ฐ, C#์—์„œ ์“ฐ๋Š” using์ด๋ž‘์€ ๋‹ค๋ฅด๋‹ค.

C++์˜ ๊ฒฝ์šฐ์—” ์ € iostream ์ด๋ผ๋Š” ํ—ค๋”ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ main.cpp์— ๋ถ™์—ฌ๋„ฃ์–ด๋ฒ„๋ฆฌ๋Š”๋ฐ, ๊ทธ๊ฒŒ include์˜ ์—ญํ• ์ด๋‹ค.


๊ทธ ๋‹ค์Œ์— std::cout์€ namespace std์— ์žˆ๋Š” cout ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์“ด๋‹ค๋Š” ๋œป์ด๋‹ค.

(std๋Š” standard์˜ ์•ฝ์ž๋‹ค.)


cout ์ดํ›„์— ๋‚˜์˜ค๋Š” "<<" ์€ cout์˜ ์˜คํผ๋ ˆ์ดํ„ฐ ์ธ๋ฐ, ์ด ์˜คํผ๋ ˆ์ดํ„ฐ๋Š” << ๋’ค์— ์žˆ๋Š”๊ฑธ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค.


๊ทธ๋ฆฌ๊ณ  std::endl;; ์€ end line์˜ ์•ฝ์ž์ธ๋ฐ, new line๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋‹ค. ๊ธฐ์กด C์—์„œ ์“ฐ๋˜ "\n" (์—ญ์Šฌ๋ž˜์‰ฌ+n) ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.


1

2

3

4

5

6

7

8

#include <iostream>

int main(void)

{

ย ย ย std::cout << "Hello World" << std::endl;

ย ย ย std::cout << "Hello World" << "\n";

ย ย ย std::cout << "Hello World\n";

}

Colored by Color Scripter

cs


์ฆ‰ ์ € 3๊ฐ€์ง€ ์ฝ”๋“œ๋Š” ๋˜‘๊ฐ™์ด Hello World ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ•œ์นธ ๋„์šฐ๋Š” ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์ค€๋‹ค.





2-2 ํƒ€์ž…(์ž๋ฃŒํ˜•)


๋จผ์ €, C++์—์„œ ๋ชจ๋“  ์ด๋ฆ„๊ณผ ํ‘œํ˜„์‹๋“ค์€ ํƒ€์ž…์„ ๊ฐ–๊ฒŒ ๋˜๊ณ , ์ด ํƒ€์ž…๋“ค์€ ์ž์‹ ์— ๋Œ€ํ•ด ์ž‘์šฉํ•˜๋Š” ์—ฐ์‚ฐ์„ ๊ฒฐ์ •ํ•ด์ค€๋‹ค.


int i; ๋ผ๊ณ  ํ•˜๋ฉด, int ํƒ€์ž…์˜ i๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๊ฒƒ์ด๋‹ค.



int i ๋Š” ๋Œ€์ฒด๋กœ 32bit ์ •์ˆ˜๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ, โˆ’2,147,483,648 ย ๋ถ€ํ„ฐ ย 2,147,483,647 ๊นŒ์ง€์˜ ๊ฐ’์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹ค.


์•„๋ž˜ ๋งํฌ๋Š” msdn์— ์˜ฌ๋ผ์˜จ C++์˜ ๊ธฐ๋ณธ ํƒ€์ž…์— ๊ด€ํ•œ ๋ฌธ์„œ๋‹ค. ์•„๋ž˜ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ์—ฌ๋Ÿฌ ํƒ€์ž…๋“ค์ด ์žˆ๋Š”๋ฐ, ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ๋‹ค.


https://msdn.microsoft.com/en-us/library/cc953fe1.aspx


์ด๊ฑด CPP๋ ˆํผ๋Ÿฐ์Šค ๋‹ท์ปด์˜ ๋ฌธ์„œ๋‹ค.


http://en.cppreference.com/w/cpp/language/types



๊ทธ๋Ÿผ ์ •์ˆ˜ํ˜• ํƒ€์ž…์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž~


์ •์ˆ˜ํ˜• ํƒ€์ž…์—๋Š” byte ํฌ๊ธฐ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ํƒ€์ž…๋“ค์ด ์žˆ๋‹ค.


char ์€ 1byte ์งœ๋ฆฌ ์ •์ˆ˜ํ˜• ํƒ€์ž…์ด๋‹ค.

short๋Š” 2byte ์งœ๋ฆฌ ์ •์ˆ˜ํ˜• ํƒ€์ž…์ด๋‹ค.

int์™€ long ์€ 4byte ์งœ๋ฆฌ ์ •์ˆ˜ํ˜• ํƒ€์ž…์ด๋‹ค.

long long ์€ 8byte ์งœ๋ฆฌ ์ •์ˆ˜ํ˜• ํƒ€์ž…์ด๋‹ค.


long๊ณผ int๋Š” ๋‘˜๋‹ค 4byte๊ณ , ๋‘˜๋‹ค ์ •์ˆ˜ํ˜• ์ž๋ฃŒ๊ณ , ๋‘˜๋‹ค โˆ’2,147,483,648 ย ๋ถ€ํ„ฐ ย 2,147,483,647 ๊นŒ์ง€์˜ ๊ฐ’์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ™์€๊ฒŒ ์•„๋‹Œ๊ฐ€์š”? ํ• ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„๋ž˜ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ์•Œ์ˆ˜ ์žˆ๋‹ค.


https://software.intel.com/en-us/articles/size-of-long-integer-type-on-different-architecture-and-os


๋‚ด์šฉ์„ ์š”์•ฝํ•ด ๋ณด์ž๋ฉด ์ธํ…” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ์šฐ OS์— ๋”ฐ๋ผ long์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

์œˆ๋„์šฐ์ฆˆ์˜ ๊ฒฝ์šฐ๋Š” 32๋น„ํŠธ๋‚˜ 64๋น„ํŠธ์— ์ƒ๊ด€์—†์ด 4byte ์ง€๋งŒ, ๋ฆฌ๋ˆ…์Šค์™€ ๋งฅ์˜ ๊ฒฝ์šฐ๋Š” 64๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์ผ๋•Œ 8byte ์ทจ๊ธ‰์„ ๋ฐ›๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.


8byte๊ฐ€ ๋œ๋‹ค๋ฉด -9223372036854775808 ๋ถ€ํ„ฐ 9223372036854775807 ๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋‹ˆ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.



์ด ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์˜๋ฌธ์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ์„ํ…Œ๋‹ˆ ์•„๋ž˜ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๋„ ์ฒจ๋ถ€ํ•œ๋‹ค.

2โ€™s complement, ๋˜๋Š” twoโ€™s complement ๋ผ ํ•˜๋Š”๋ฐ, ์–ด๋–ป๊ฒŒ ๋น„ํŠธ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ •์ˆ˜ํ˜•์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์–ธ์  ๊ฐ€ ํ•œ๋ฒˆ์ฏค ์ฝ๊ณ  ๋„˜์–ด๊ฐ€๋Š” ์ •๋„๋งŒ ํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ˆ, ์ฝ๊ณ  ์‹ถ์œผ๋ฉด ์ฝ์–ด๋ณด์ž.


https://en.wikipedia.org/wiki/Two's_complement



๋‹ค์Œ์€ ๋ถ€๋™์†Œ์ˆ˜ํ˜•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

ํ”ํžˆ๋“ค ์‹ค์ˆ˜ํ˜• ๋ณ€์ˆ˜๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋ถ€๋™์†Œ์ˆ˜์ , ๊ณ ์ •์†Œ์ˆ˜์ ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ•˜๋Š”๋ฐ C++์—์„œ๋Š” C์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ€๋™์†Œ์ˆ˜์  ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ•œ๋‹ค.


์œ„์— ์žˆ๋˜ ๊ธฐ๋ณธ ํƒ€์ž…๋“ค์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด float๊ณผ double์ด ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ๋“ค์ด ์‹ค์ˆ˜ํ˜•์„ ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•œ ๋ถ€๋™์†Œ์ˆ˜๋“ค์ด๋‹ค. (floating point)


์ด ๋‘˜์˜ ์ฐจ์ด๋Š” ์ •๋ฐ€๋„์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณด๋‹ค ์ •๋ฐ€ํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด double์„ ์“ฐ๊ณ , ์•„๋‹ˆ๋ผ๋ฉด float์„ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๊นŒ์ง€๋„ ๊ฒŒ์ž„์—์„  float ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋ผ float์„ ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹๋‹ค.




๋ถ€๋™์†Œ์ˆ˜์ ์˜ ๊ตฌํ˜„์€ IEEE 754์˜ ๊ตฌํ˜„์„ ๋”ฐ๋ฅธ๋‹ค. ์•„๋ž˜ ๋งํฌ๋Š” ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•œ ์œ„ํ‚ค ๋‚ด์šฉ์ด๋‹ค.

2โ€™s complement์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•œ๋ฒˆ์ฏค ์ฝ์–ด๋ณผ๋งŒํ•˜๋‹ค.


https://en.wikipedia.org/wiki/IEEE_754


๋นˆ์•ฝํ•˜์ง€๋งŒ ํ•œ๊ธ€๋กœ๋œ ๋‚ด์šฉ๋„ ์žˆ๋‹ค! (์ฐพ์•„๋ณด๋‹ˆ 2โ€™s complement(2์˜ ๋ณด์ˆ˜)์˜ ๋‚ด์šฉ๋„ ์žˆ์–ด์„œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•จ.)



https://ko.wikipedia.org/wiki/IEEE_754

https://ko.wikipedia.org/wiki/2์˜_๋ณด์ˆ˜




์ถ”๊ฐ€)

1byte ์ •์ˆ˜ํ˜• ํƒ€์ž…์„ ๋ณด๋ฉด, bool ์ด๋ผ๋Š” ํƒ€์ž…๋„ ์žˆ๋Š”๋ฐ, bool์€ ์ฐธ, ๊ฑฐ์ง“์— ๊ด€ํ•œ boolean ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํƒ€์ž…์ด๋‹ค.


bool ํƒ€์ž…์ธ ๋ณ€์ˆ˜์—๋‹ค๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๋”๋ผ๋„, ์•”์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜๋˜์„œ, bool ๊ฐ’์ด ๋œ๋‹ค. 0์ด๋ฉด false, ๊ทธ ์™ธ์—๋Š” true๊ฐ€ ๋˜๋Š” ํ˜•์‹์ด๋‹ค. ํ•˜์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ warning์„ ๋ฟœ์–ด๋‚ผํ…Œ๋‹ˆ, ๊ทธ๋ƒฅ true, false๋ฅผ ์ง‘์–ด ๋„ฃ์ž.