Skip to content

Latest commit

ย 

History

History

5-basic-operators

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 

๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž

C์˜ ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ๋ฐฐ์›๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž(operator)

์ปดํ“จํ„ฐ(computer)๋ผ๋Š” ๋‹จ์–ด๋Š” ์‚ฌ์‹ค ๊ณ„์‚ฐ(compute)ํ•˜๋Š” ๊ธฐ๊ณ„๋ผ๋Š” ๋ง์ž…๋‹ˆ๋‹ค. 2์žฅ์—์„œ ๋ง์”€๋“œ๋ ธ๋“ฏ์ด, ์ปดํ“จํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์—ฐ์‚ฐ์žฅ์น˜๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์žฅ์—์„  ๊ทธ ์—ฐ์‚ฐ์žฅ์น˜๊ฐ€ ์–ด๋–ค ๊ธฐ๋ณธ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž๋Š” ์—ฐ์‚ฐ์žฅ์น˜์—๊ฒŒ ์ˆ˜ํ•™์—์„œ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฐ์‚ฐ์— ๊ด€๋ จ๋œ ๋ช…๋ น์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๊ฐ’์ด๋‚˜ ์‹์„ ํ”ผ์—ฐ์‚ฐ์ž(operand) ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์ž๋ฅผ ๋‹จํ•ญ ์—ฐ์‚ฐ์ž(unary operator), ์ดํ•ญ ์—ฐ์‚ฐ์ž(binary operator), ์‚ผํ•ญ ์—ฐ์‚ฐ์ž(ternary operator)๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1 + 2์—์„œ +๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ 1๊ณผ 2 ๋‘ ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ดํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋Œ€์ž… ์—ฐ์‚ฐ์ž(assignment operator)

๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. 2์žฅ์˜ ์˜์‚ฌ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ƒ๊ธฐํ•ด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

load 2
load 3
add
store 1

์—ฌ๊ธฐ์„œ store์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋Œ€์ž… ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์‹ค์ œ C ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

int main()
{
    int result;
    result = 6;
    result = 5;
}

์ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•˜๋Š”์ง€ ๊ฐ์ด ์˜ค์‹œ๋‚˜์š”? int๋Š” 4๋ฐ”์ดํŠธ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์ž๋ฃŒํ˜•์ด๋‹ˆ, result๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ 20๋ฒˆ๋ถ€ํ„ฐ 23๋ฒˆ์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ์ดˆ๊ธฐ์‹์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, int result; ๊นŒ์ง€๋Š” 20~23๋ฒˆ์— ๋ฌด์—‡์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„ result = 6;์ด ์ง€๋‚˜๋ฉด 20~23๋ฒˆ์—” 6์ด ๋“ค์–ด์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„ result = 5;๊ฐ€ ์ง€๋‚˜๋ฉด 20~23๋ฒˆ์—” 5๊ฐ€ ๋“ค์–ด์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๋ง์— ๊ฐ€๊น๊ฒŒ ์“ฐ๋ฉด

ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ํ–ˆ์„ ๋•Œ,
    ์ ๋‹นํ•œ ๊ณต๊ฐ„์„ result๋ผ๊ณ  ์ด๋ฆ„ ์ง“์Šต๋‹ˆ๋‹ค.
    result๋ผ๋Š” ์ด๋ฆ„์˜ ๊ณต๊ฐ„์— 6์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.
    result๋ผ๋Š” ์ด๋ฆ„์˜ ๊ณต๊ฐ„์— 5๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.

๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

20,21,22,23๋ฒˆ ๊ฐ๊ฐ์— 6์ด๋‚˜ 5๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•ด์ฃผ์„ธ์š”. 4์žฅ์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ, int๋ผ๋Š” ์ž๋ฃŒํ˜•์€ ๋” ํฐ ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, 4๋ฐ”์ดํŠธ์˜ ๊ณต๊ฐ„์„ ๋ฌถ์–ด์„œ ์ตœ๋Œ€ 32์ž๋ฆฌ 2์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค. ์ฆ‰, 20~23๋ฒˆ์—” 00000006(16)(2์ง„์ˆ˜๋กœ 32์ž๋ฆฌ)์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋„ค ๊ณต๊ฐ„ ์ค‘ ์„ธ ๊ณต๊ฐ„์—” 0๋งŒ ๋“ค์–ด์žˆ๊ณ , ๋‚˜๋จธ์ง€ ํ•œ ๊ณต๊ฐ„์— 6์ด ๋“ค์–ด์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ณต๊ฐ„์„ ๋ฌถ์–ด ํ•œ ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋„ ๋‚˜์ค‘์— ์ž์„ธํžˆ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์–ด๋–ค ์ž๋ฃŒํ˜•์€ ์—ฌ๋Ÿฌ ๊ณต๊ฐ„์ด ํ•˜๋‚˜์˜ ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋„๋ก ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”.

์•ž์œผ๋กœ "๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฌด์—‡์„ ๋Œ€์ž…ํ•œ๋‹ค"๋Š” ๋ง์„ ์ค„์—ฌ์„œ "๋ณ€์ˆ˜์— ๋ฌด์—‡์„ ๋Œ€์ž…ํ•œ๋‹ค"๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„๋„ "๋ณ€์ˆ˜์— ๋ฌด์—‡์„ ๋Œ€์ž…ํ•˜๋‹ค"์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํ•จ๊ป˜ ์“ฐ๋Š” ๊ฑด ์ œ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด๋‚ธ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ์—ฐ์‚ฐ์ž๋กœ ๋Œ์•„์˜ต์‹œ๋‹ค. ์ˆ˜ํ•™์—์„œ = ๋ผ๋Š” ๊ธฐํ˜ธ๋Š” ์ขŒํ•ญ๊ณผ ์šฐํ•ญ์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ผ๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐํ˜ธ์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ C์—์„  ์šฐํ•ญ์˜ ํ‘œํ˜„์‹(expression)์˜ ๊ฐ’์„ ์ขŒํ•ญ์˜ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์— ์ €์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด =๋ผ๋Š” ๊ธฐํ˜ธ๋ฅผ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž(arithmetic operator)

์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. C์—์„  ๋‹ค์„ฏ๊ฐ€์ง€ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ์š”, ๋ง์…ˆ ์—ฐ์‚ฐ์ž(+), ๋บ„์…ˆ ์—ฐ์‚ฐ์ž(-), ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž(*), ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž(/), ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์ž(%) ๋‹ค์„ฏ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. /๊ฐ€ ๋‹จ์ˆœํžˆ ๋‚˜๋ˆ—์…ˆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ชซ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž„์— ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 17, b = 6;
    int c;
    c = a + b;
    printf("a + b = %d    ", c);
    printf("a - b = %d    ", a - b);
    int d = a * b;
    printf("a * b = %d    ", d);
    printf("a / b = %d    ", a / b);
    printf("a % b = %d    ", a % b);
    int e = a * 2;
    printf("a * 2 = %d", e);
}
a + b = 23    a - b = 11    a * b = 102    a / b = 2    a % b = 5    a * 2 = 12

์ด ์˜ˆ์ œ๋Š” ๋งŽ์€ ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ์š”, ์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜๋ฉด,

  • C์—์„œ ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • c = a + b๋ฅผ ํ†ตํ•ด ๋Œ€์ž… ์—ฐ์‚ฐ์ž์˜ ์šฐํ•ญ์— ๋‹จ์ˆœํ•œ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์šฐํ•ญ์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ’(value)์ด ์•„๋‹ˆ๋ผ ํ‘œํ˜„์‹์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ์š”, ๋ฐ”๋กœ ์ด๋Ÿฐ ํŠน์ง•์„ ๊ณ ๋ คํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • int d = a * b๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋„ ์ดˆ๊ธฐ์‹์— ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • printf("a - b = %d", a - b)๋ฅผ ํ†ตํ•ด printf์—๋„ ์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ C๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„  ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์— ์‹๋„ ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋ฃŒํ˜•์ด๋ผ๋Š” ๊ฑด ๋ณ€์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ’์ด๋‚˜ ์‹์—๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • int๋ฅผ ์‚ฌ์น™์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ int์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • int e = a * 2๋ฅผ ํ†ตํ•ด ๋ฐ˜๋Œ€๋กœ ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์— ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์ œ๋Š” ์ •์ˆ˜ ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด์—ˆ๋Š”๋ฐ์š”, ๋ถ€๋™์†Œ์ˆ˜์  ์ž๋ฃŒํ˜•(float, double)์— ๋Œ€ํ•ด์„  ๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์ž์˜ ํ–‰๋™์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    double a = 17, b = 6;
    printf("a / b = %lf", a / b);
}
a / b = 2.833333

์ด๋ ‡๊ฒŒ ๋ชซ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋‚˜๋ˆ—์…ˆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 17/6์€ ๋ฌดํ•œ์†Œ์ˆ˜๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—, 17/6์— ๊ฐ€๊นŒ์šด ์†Œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–จ๊นŒ์š”? ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ Visual Studio์— ์ž…๋ ฅํ•ด๋ณด์„ธ์š”.

#include <stdio.h>

int main()
{
    double a = 17, b = 6;
    printf("a % b = %lf", a % b);
}

printf์•ˆ์˜ a์™€ b์— ๋นจ๊ฐ„ ์ค„์ด ๋œจ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ๋ฉด,

Your first error

์ด๋ ‡๊ฒŒ "expression must have integral type", ์ฆ‰ "ํ‘œํ˜„์‹์˜ ์ž๋ฃŒํ˜•์ด ์ •์ˆ˜ํ˜•์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋งž์ง€ ์•Š์€ C ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋””ํ„ฐ๊ฐ€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋นจ๊ฐ„ ์ค„์„ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์ฒด๊ฐ€ ์—๋””ํ„ฐ์ธ ๊ฒƒ์— ์ฃผ๋ชฉํ•ด์ฃผ์„ธ์š”. ์—ฌ๊ธฐ์„œ Ctrl + F5๋ฅผ ๋ˆ„๋ฅด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

Error output

์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์†Œ์Šค ์ฝ”๋“œ์˜ ์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ์ฃผ์ฒด๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์ธ ๊ฒƒ์— ์ฃผ๋ชฉํ•ด์ฃผ์„ธ์š”. ์—ฌ๊ธฐ์„œ ๋ฐ‘์— "Error List"๋ฅผ ๋ˆ„๋ฅด์‹œ๋ฉด ์ด๋ ‡๊ฒŒ ์—๋””ํ„ฐ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ž˜ ์ •๋ฆฌํ•ด์„œ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Message adapter result

์—ฌ๊ธฐ์„œ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์—๋””ํ„ฐ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ์˜์™ธ๋กœ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„  ์ปดํŒŒ์ผ์„ ์ผ๋ถ€ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋‚˜์„œ ์—๋””ํ„ฐ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ด ์ค„ ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ์—๋””ํ„ฐ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ์—๋””ํ„ฐ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ด์ฃผ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๋งŽ์€ ๋ถ„๋“ค์ด "๋นจ๊ฐ„ ์ค„์€ ์•ˆ ๋œจ๋Š”๋ฐ ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์š”?"๋ผ๋Š” ์งˆ๋ฌธ์„ ํ•˜์‹œ๋Š”๋ฐ, ๋นจ๊ฐ„ ์ค„์„ ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ฃผ์ฒด์™€ ์‹ค์ œ ์˜ค๋ฅ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ๊ธฐ์–ตํ•ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋นจ๊ฐ„ ์ค„์ด ์—†์–ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๊ณ , ๋นจ๊ฐ„ ์ค„์ด ์žˆ์–ด๋„ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ ๋‚˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• ์„ ์ž์„ธํžˆ ์•Œ๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„์„ ์œ„ํ•ด ๋ถ€๊ฐ€ ์„ค๋ช…์„ ํ•˜์ž๋ฉด, ์ปดํŒŒ์ผ๊นŒ์ง€๋Š” ๊ดœ์ฐฎ์€๋ฐ ๋งํฌ ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ง์ปค ๊ตฌ๋ถ„์€ ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฃจ๊ณ  ๋‚˜์„œ์•ผ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋Œ€์ž… ์—ฐ์‚ฐ์ž์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์‹ค์ˆ˜๋“ค

๋Œ€์ž… ์—ฐ์‚ฐ์ž์™€ ์ˆ˜ํ•™์—์„œ์˜ ๋“ฑํ˜ธ๊ฐ€ ๋ชจ์–‘์ด ๊ฐ™์€ ํƒ“์—, ๋งŽ์€ ๋ถ„๋“ค์ด ์ข…์ข… ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ์ €์ง€๋ฅด์‹ญ๋‹ˆ๋‹ค.

int main()
{
    int a = 5;
    a + 1 = 6;
}

a + 1์€ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณต๊ฐ„์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐํ•ญ์˜ ๊ฐ’์„ ์ขŒํ•ญ์— ๋Œ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์ง‘์–ด๋„ฃ๋Š”๋‹ค๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 5;
    a = a + 1;
    a = 2 + a;
    printf("%d", a);
}
8

๋จผ์ € a์— 5๊ฐ€ ๋Œ€์ž…๋ฉ๋‹ˆ๋‹ค. a = a + 1์— ์˜ํ•ด, ์—ฐ์‚ฐ์žฅ์น˜๊ฐ€ a์—์„œ 5๋ฅผ ๊บผ๋‚ด 1์„ ๋”ํ•œ ๊ฒฐ๊ณผ์ธ 6์„ ๋‹ค์‹œ a์— ์ง‘์–ด๋„ฃ์Šต๋‹ˆ๋‹ค. a = 2 + a๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, 2์™€ a์—์„œ ๊บผ๋‚ธ 6์„ ๋”ํ•œ ๊ฒฐ๊ณผ์ธ 8์„ a์— ์ง‘์–ด๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ a์—” 8์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฐ๊ณผ๋Š” 8์ด ๋ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ =๊ฐ€ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค๋Š” ๊ฐœ๋…์ž„์„ ๋ช…์‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„(operator precedence)

์ˆ˜ํ•™์—์„œ ํ•œ ์‹์— ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ ์„ž์–ด์“ธ ์ˆ˜ ์žˆ๋“ฏ์ด, C์—์„œ๋„ ํ•œ ์‹์— ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("%d", 1 + 3 * 5);
}
16

์ˆ˜ํ•™์—์„œ ๊ทธ๋Ÿฐ ๊ฒƒ์ฒ˜๋Ÿผ, C์—์„œ๋„ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. *์™€ /, %๊ฐ€ +๋‚˜ - ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 1 + 3 * 5๋Š” ์‹ค์ œ๋กœ 1 + (3 * 5)๋กœ ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์‹ถ์œผ๋ฉด ์ˆ˜ํ•™์—์„œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("%d", (1 + 3) * 5);
}
20

์ˆ˜ํ•™์—์„œ์™€ ๋‹ค๋ฅด๊ฒŒ, C์—์„  ์—ฐ์‚ฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ด„ํ˜ธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํ•ญ์ƒ ์†Œ๊ด„ํ˜ธ( )๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์›๋ž˜ ์ˆ˜ํ•™์—์„œ

36 / {(1 + 2) * 5}

๋กœ ํ‘œ๊ธฐํ•˜๋˜ ๊ฒƒ๋„ 36 / ((1 + 2) * 5) ๋กœ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("%d", 36 / ((1 + 2) * 5));
}
2

๋Œ€์ž… ์—ฐ์‚ฐ์ž =๋„ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋‚ฎ์€ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์•„๊นŒ ๋ณ€์ˆ˜์— ๋ง์…ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ž…ํ•  ๋•Œ, c = a + b; ์ฒ˜๋Ÿผ ์ผ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๊ด„ํ˜ธ๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? c = (a + b);๊ฐ€ ๋˜์–ด ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜๋Š”๋Œ€๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. =๊ฐ€ +๋ณด๋‹ค ๋†’์€ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค๋ฉด (c = a) + b๊ฐ€ ๋ ํ…๋ฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์šฐ๋ฆฌ๊ฐ€ ์˜๋„ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋ ํ…๋ฐ์š”, C์˜ ์ „์ฒด ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋Š” ์—ฌ๊ธฐ, C++์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ๋ฐฉํ–ฅ(operator associativity)

1 + 2 + 3์€ (1 + 2) + 3์œผ๋กœ ํ•ด์„ํ•˜๋Š”๊ฒŒ ๋งž์„๊นŒ์š”, 1 + (2 + 3)์œผ๋กœ ํ•ด์„ํ•˜๋Š”๊ฒŒ ๋งž์„๊นŒ์š”? ๋งŒ์•ฝ ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ํ‘œ์ค€์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ œ์ž‘ํ•˜๋Š” ํšŒ์‚ฌ๋“ค์ด ์ด ๋ฐฉํ–ฅ์„ ์›ํ•˜๋Š”๋Œ€๋กœ ์ •ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์–ด๋””์„œ๋Š” ๋Œ์•„๊ฐ€๋˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋””์„œ๋Š” ๋Œ์•„๊ฐ€์ง€ ์•Š๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ C ํ‘œ์ค€์—์„  ์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ด„ํ˜ธ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ•ด์•ผํ•˜๋Š”์ง€๋„ ์ •ํ•ด๋†“์•˜๋Š”๋ฐ์š”, ๊ทธ๊ฑธ ์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ๊ฒฐํ•ฉ๋ฐฉํ–ฅ๋„ ์œ„์˜ ๋‘ ์ฐธ๊ณ  ์ž๋ฃŒ์— ์ ํ˜€์žˆ๋Š”๋ฐ์š”, ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์—ฐ์‚ฐ์ž๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์˜ˆ์‹œ๋กœ ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 5, b = 6, c = 7;
    a = b = c + 1;
    printf("%d %d %d", a, b, c);
}
8 8 7

๋จผ์ € ๋ง์…ˆ ์—ฐ์‚ฐ์ž๊ฐ€ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ a = b = c + 1์€ a = b = (c + 1)๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์ด๋ผ๋Š” ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋ถ€ํ„ฐ ๊ด„ํ˜ธ๋ฅผ ์นœ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ a = b = (c + 1)์€ a = (b = (c + 1))์œผ๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ผ๋‹จ b์— c + 1์˜ ๊ฒฐ๊ณผ์ธ 8์ด ๋Œ€์ž…๋˜๋Š” ๊ฒƒ์€ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์™œ a์—๋„ 8์ด ๋Œ€์ž…๋˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ๊ทธ๊ฑด ๋Œ€์ž…์—ฐ์‚ฐ์ž์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋Œ€์ž…ํ•œ ๊ฐ’์ด๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, b = (c + 1)์˜ ๊ฒฐ๊ณผ๋Š” 8์ด ๋˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ a = 8์ด ๋˜์–ด a์—๋„ ๊ฐ™์€ ๊ฐ’์ด ๋Œ€์ž…๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋“ค์€ ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์ด ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์™ผ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ถ€ํ„ฐ ๊ด„ํ˜ธ๋ฅผ ์นœ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด a + b + c๋Š” (a + b) + c๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์ด์˜€๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? 8 - 4 - 2์˜ ๊ฒฐ๊ณผ๋Š” ์ˆ˜ํ•™์ ์œผ๋กœ 2์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์ด๋ฉด 8 - 4 - 2๋Š” 8 - (4 - 2)๊ฐ€ ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ 6์ด ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฑด ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ์ž์˜ ์šฐ์„  ์ˆœ์œ„์™€ ์—ฐ์‚ฐ์ž์˜ ๊ฒฐํ•ฉ๋ฐฉํ–ฅ์€ ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š”๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ์„ค์ •๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํ„ฐ๋Ÿด(literal)

์œ„์—์„œ ๋ณ€์ˆ˜ ๋Œ€์‹ ์— ๊ฐ’์„ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์•„๊นŒ ๋ถ€๋™์†Œ์ˆ˜์  ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜ ๋‘ ๊ฐœ์™€ ๋‚˜๋ˆ—์…ˆ์„ ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋ด…์‹œ๋‹ค.

#include <stdio.h>

int main()
{
    double a = 17, b = 6;
    printf("a / b = %lf", a / b);
}

๊ทธ๋Ÿผ a / b ๋Œ€์‹ ์— 17 / 6์„ ์‚ฌ์šฉํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ฒ ๋„ค์š”.

#include <stdio.h>

int main()
{
    printf("a / b = %lf", 17 / 6);
}

ํ•˜์ง€๋งŒ ์ด ์˜ˆ์ œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ์š”? 17๊ณผ 6 ์œ„์— ๋งˆ์šฐ์Šค ํฌ์ธํ„ฐ๋ฅผ ์˜ฌ๋ ค๋†“์•„์ฃผ์„ธ์š”.

int literal

์ด๋ ‡๊ฒŒ 17๊ณผ 6์˜ ์ž๋ฃŒํ˜•์ด int์ธ ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๊ธฐ์„œ 17 / 6์€ int๋ผ๋ฆฌ์˜ ๋‚˜๋ˆ—์…ˆ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒฐ๊ณผ๋„ int๊ฐ€ ๋˜์–ด, ์ž˜๋ชป๋œ ํ˜•์‹ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค.

4์žฅ์—์„œ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค๋ฃฐ ๋•Œ ์ดˆ๊ธฐ์‹์ด ์—†์œผ๋ฉด ๋ณ€์ˆ˜์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•œ ์ ์ด ์žˆ๋Š”๋ฐ์š”, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๊ฒฝ์šฐ์—๋„ ๋ฌด์—‡์ด ์ถœ๋ ฅ๋ ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฑด C ํ‘œ์ค€์—์„œ, ์ž˜๋ชป๋œ ํ˜•์‹ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, printf๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผํ•˜๋Š”์ง€ ์ •ํ•ด๋†“์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ ์ž˜ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํŠน์ • ๊ฒฝ์šฐ์— ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐˆ์ง€ ์ •ํ•ด๋†“์ง€ ์•Š์€ ๊ฒƒ์„ ์ •์˜๋˜์ง€ ์•Š์€ ํ–‰๋™(undefined behavior) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์‹์„ ๋„ฃ์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๋„ undefined behavior์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ž๋ฃŒํ˜•์ด int๊ฐ€ ์•„๋‹ˆ๋ผ double์ธ ์ˆซ์ž๋ฅผ ์ ๊ธฐ ์œ„ํ•ด์„  ์†Œ์ˆ˜์ ์„ ํ•จ๊ป˜ ์ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("a / b = %lf", 17.0 / 6.0);
}
a / b = 2.833333

์•„๊นŒ ํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ 17.0๊ณผ 6.0 ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์ž๋ฃŒํ˜•์ด double์ด ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ int๋‚˜ double ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง„ ์ˆซ์ž๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฃŒํ˜• ์˜ˆ์‹œ ์„ค๋ช…
float 1.0f ์†Œ์ˆ˜ ๋’ค์— f๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
long 17l ์ •์ˆ˜ ๋’ค์— l์„ ๋ถ™์ž…๋‹ˆ๋‹ค.
long long 23ll ์ •์ˆ˜ ๋’ค์— ll์„ ๋ถ™์ž…๋‹ˆ๋‹ค.
unsigned 39u ์ •์ˆ˜ ๋’ค์— u๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
unsigned long 28ul ์ •์ˆ˜ ๋’ค์— ul์„ ๋ถ™์ž…๋‹ˆ๋‹ค.
unsigned long long 28ull ์ •์ˆ˜ ๋’ค์— ull์„ ๋ถ™์ž…๋‹ˆ๋‹ค.
#include <stdio.h>

int main()
{
    printf("%d %f %llu %lf", 20, 1.0f, 28ull, 2.5);
}
20 1.000000 28 2.500000

์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์‹์ด ๋“ค์–ด๊ฐ€๋Š” ์ž๋ฆฌ์— ๋ฐ”๋กœ ๋„ฃ์€ ๊ฐ’์„ ๋ฆฌํ„ฐ๋Ÿด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ๋Š” ๋ชจ๋‘ 10์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์ธ๋ฐ์š”, 2์ง„์ˆ˜, 8์ง„์ˆ˜, 16์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    short s = 0b10010;
    printf("%hd %u %lld", s, 024u, 0x234ll);
}
18 20 564

์ด๋ ‡๊ฒŒ 0b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž๋Š” 2์ง„์ˆ˜, 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž๋Š” 8์ง„์ˆ˜, 0x์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž๋Š” 16์ง„์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์œ„์—์„œ ๋‹ค๋ค˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ u๋‚˜ l ๊ฐ™์€ ๊ฒƒ์„ ๋ถ™์—ฌ ์ž๋ฃŒํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์ˆซ์ž์˜ ๋ฆฌํ„ฐ๋Ÿด๋งŒ์„ ๋‹ค๋ค˜์ง€๋งŒ, ๋‚˜์ค‘์— ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฆฌํ„ฐ๋Ÿด๋„ ๋‚˜์˜ฌ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

literal์€ ๋ง ๊ทธ๋Œ€๋กœ์˜๋ผ๋Š” ๋œป์˜ ํ˜•์šฉ์‚ฌ์ž…๋‹ˆ๋‹ค.

ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž(casting operator)

์•„๊นŒ 17๊ณผ 6 ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ, (int)17 ์ด๋ผ๊ณ  ๋œฌ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์ด (int)๋ผ๋Š” ํ‘œ์‹œ๋Š” ๋‹จ์ˆœํžˆ ์—๋””ํ„ฐ์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์œ ํšจํ•œ C์˜ ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํ˜•๋ณ€ํ™˜(ๅž‹่ฎŠๆ›) ์—ฐ์‚ฐ์ž๋ผ๋Š” ์ด๋ฆ„์—์„œ ์•Œ์•„์ฐจ๋ฆฐ ๋ถ„๋„ ๊ณ„์‹œ๊ฒ ์ง€๋งŒ, ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–ค ์‹์˜ ์ž๋ฃŒํ˜•์„ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(<์ž๋ฃŒํ˜•>)<์‹>

์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("%lf, %d", (double)17, (int)(17.0 + 8.0));
}
17.000000, 25

์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ int์ธ ์‹์€ double๋กœ, double์ธ ์‹์€ int๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž๋Š” ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’๊ณ , ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, (int)17.0 + 8.0์€ ((int)17.0) + 8.0์œผ๋กœ ํ•ด์„๋˜๊ณ , (double)(int)7.5๋Š” (double)((int)7.5)๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

์•”์‹œ์ ์ธ ํ˜•๋ณ€ํ™˜(implicit type conversion)

์—ฐ์‚ฐ์ž ์–‘ ์˜†์˜ ๋‘ ํ•ญ์˜ ์ž๋ฃŒํ˜•์ด ์„œ๋กœ ๋‹ค๋ฅด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, 5.0 / 2๋Š” ์—ฐ์‚ฐ์ž / ์–‘ ์˜†์— double๊ณผ int๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ 2.5๊ฐ€ ๋ ๊นŒ์š”, ์•„๋‹ˆ๋ฉด ์ •์ˆ˜์˜ ๋‚˜๋ˆ—์…ˆ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋˜์–ด 2๊ฐ€ ๋ ๊นŒ์š”, ์•„๋‹ˆ๋ฉด ์•„๊นŒ ์ „ ์ฒ˜๋Ÿผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ์š”? ๋งŒ์•ฝ ์—ฐ์‚ฐ์ž์˜ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๋‹ค๊ณ  ํ•ด์„œ ํ•ญ์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ค๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 5.0 / 2์˜ ๊ฒฝ์šฐ, int์ธ 2๊ฐ€ double๋กœ ํ˜•๋ณ€ํ™˜๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ double์ด ๋ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    double d = 5.0;
    int i = 2;
    printf("%lf", d / i);
}
2.5

๊ทธ๋Ÿผ ์‹ค์ˆ˜์™€ ์ •์ˆ˜ ๋ง๊ณ  ์ •์ˆ˜์™€ ์ •์ˆ˜ ์ž๋ฃŒํ˜•์ธ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? unsigned short s = 65535;์™€ unsigned i = 1;๊ฐ€ ์žˆ์„ ๋•Œ, s + i์˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์ผ๋‹จ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ง์…ˆ์˜ ๊ฒฐ๊ณผ๊ฐ€ 65536์ธ ๊ฑด ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ i๊ฐ€ ์•”์‹œ์ ์œผ๋กœ unsigned short๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค๋ฉด, ๊ทธ๋Ÿผ ๊ฐ’์ด 65536์ธ unsigned short๊ฐ€ ๋˜๋Š”๋ฐ, unsigned short๋Š” 0๋ถ€ํ„ฐ 65535(2ยนโถ - 1)๊นŒ์ง€๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์ˆซ์ž๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๊ฒฝ์šฐ์—” s๊ฐ€ unsigned๋กœ ํ˜•๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์ด ๋” ๋งž์•„๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ ๋‘˜ ๋‹ค unsigned์ด๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค signed์ผ ๊ฒฝ์šฐ ๋‘˜ ์ค‘์— ํฌ๊ธฐ๊ฐ€ ๋” ํฐ ์ž๋ฃŒํ˜•์œผ๋กœ ํ˜•๋ณ€ํ™˜๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    unsigned short s = 65535;
    unsigned i = 1;
    printf("%u", s + i);
}
65536

์ด๋ ‡๊ฒŒ ํ˜•๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜(implicit conversion)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด์™ธ์—๋„

  • ๋‘˜ ์ค‘์— ํ•˜๋‚˜๊ฐ€ unsigned์ด๊ณ  ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๊ฐ€ signed์ผ ๋•Œ, unsigned์ธ ์ชฝ์˜ ํฌ๊ธฐ๊ฐ€ ๋” ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด signed์ชฝ์ด ๋‚˜๋จธ์ง€ ํ•˜๋‚˜์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜
  • ๋‘˜ ์ค‘์— ํ•˜๋‚˜๊ฐ€ unsigned์ด๊ณ  ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๊ฐ€ signed์ผ ๋•Œ, unsigned์ธ ์ชฝ์˜ ํฌ๊ธฐ๊ฐ€ ๋” ์ž‘์œผ๋ฉด unsigned์ชฝ์ด ๋‚˜๋จธ์ง€ ํ•˜๋‚˜์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜

๋œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทœ์น™์ด ๋งŽ์ด ๋ณต์žกํ•˜๋‹ค๊ณ  ๋Š๋ผ์‹ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Java๊ฐ™์€ ์–ธ์–ด์—” unsigned ์ •์ˆ˜ํ˜•์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ unsigned๊ฐ€ ์žˆ์–ด๋„ ์“ฐ์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ๋งํ•˜๊ณ ์š”. ๊ทธ๋ž˜์„œ ์›ฌ๋งŒํ•˜๋ฉด unsigned๋ฅผ ์“ฐ์ง€ ๋ง๊ณ , ์ •๋ง ์Œ์ˆ˜๊ฐ€ ๋  ์ผ์ด ์—†์„ ๋•Œ์—๋งŒ ์“ฐ๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถ•์†Œ ๋ณ€ํ™˜(narrowing conversion)

7.5๋ฅผ int๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? int๋Š” ์ •์ˆ˜ ์ž๋ฃŒํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์—, ์†Œ์ˆ˜์ ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ (int)7.5๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด, 7๋กœ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("%lf %d", (double)(int)7.5, (int)7.5);
}
7.000000 7

์ด๋ ‡๊ฒŒ ์ผ๋ถ€ ์ž๋ฃŒ๊ฐ€ ์†์‹ค๋ ์ง€๋„ ๋ชจ๋ฅด๋Š” ํ˜•๋ณ€ํ™˜์„ ์ถ•์†Œ ๋ณ€ํ™˜(narrowing conversion)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ถ•์†Œ ๋ณ€ํ™˜์€ ์ €๋ ‡๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•”์‹œ์ ์œผ๋กœ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int i = 7.5;
    printf("%d", i);
}
7

์ด๋Ÿฐ ์•”์‹œ์  ์ถ•์†Œ ๋ณ€ํ™˜์€ ๋ฒ„๊ทธ์˜ ์›์ธ์ด ๋˜๋Š”๋ฐ์š”, ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์›๋ž˜ double๋กœ ์จ์•ผํ•˜๋Š” ๊ฑธ int๋กœ ์ผ์„ ๋•Œ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์— ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฆ˜ ๋‚˜์˜ค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋“ค์€ ์ด๋ ‡๊ฒŒ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ,

"Narrowing conversion warning"

์ด๋ ‡๊ฒŒ ์˜ค๋ฅ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ฒฝ๊ณ ๋ฅผ ๋„์›Œ์ค๋‹ˆ๋‹ค.

๊ฒฝ๊ณ (warning)๋ผ๋Š” ๊ฑด ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์ข‹์ง€ ์•Š์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜(error)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ญ์ƒ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ธฐ๋Šฅ ์ค‘์—๋Š” ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ์˜ค๋ฅ˜๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ถ•์†Œ ๋ณ€ํ™˜์ด ํ•„์š”ํ•  ๋•Œ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•ญ์ƒ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int i = (int)7.5;
    printf("%d", i);
}
7

์‚ฐ์ˆ  ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฐ ์–ธ๋”ํ”Œ๋กœ(arithmetic overflow and underflow)

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์ž˜ ๋ด์ฃผ์„ธ์š”.

#include <stdio.h>

int main()
{
    unsigned short i = 65535, j = 1, k = 0;
    printf("%hu %hu", i + j, k - j);
}

์ด ์˜ˆ์ œ์˜ ๊ฒฐ๊ณผ๋Š” ๋†€๋ž๊ฒŒ๋„

0 65535

์ž…๋‹ˆ๋‹ค. 65535+1์˜ ๊ฒฐ๊ณผ๊ฐ€ 65536์ด๊ณ , 0-1์˜ ๊ฒฐ๊ณผ๊ฐ€ -1์ž„์„ ์šฐ๋ฆฌ๋Š” ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ปดํ“จํ„ฐ๋Š” ์™œ 0๊ณผ 65535๋ผ๊ณ  ํ• ๊นŒ์š”? 65536๊ณผ -1์ด unsigned short๊ฐ€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์— ์ฃผ๋ชฉํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์„ ๋„˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ฐ์ˆ  ์˜ค๋ฒ„ํ”Œ๋กœ(arithmetic overflow)๋ผ๊ณ  ํ•˜๊ณ , ์ตœ์†Ÿ๊ฐ’์„ ๋ชป ๋„˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ฐ์ˆ  ์–ธ๋”ํ”Œ๋กœ(arithmetic underflow)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์™œ ์ €๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š”์ง€๋Š” 4์žฅ์—์„œ ์–ธ๊ธ‰ํ•œ 2์˜ ๋ณด์ˆ˜๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ํ•จ๊ป˜ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ† ํฐํ™”(tokenization)

์ง€๊ธˆ๊นŒ์ง€์˜ ์ฝ”๋“œ์— ์ด์ƒํ•œ ์ ์ด ์‚ฌ์‹ค ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ƒ๊ฐ์€ ๋“ค์ง€ ์•Š์œผ์…จ๋‚˜์š”? ์˜ˆ๋ฅผ ๋“ค์–ด, 1+2๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ตณ์ด 1 + 2 ์ฒ˜๋Ÿผ ๊ตณ์ด ์‚ฌ์ด์— ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๋„ฃ์–ด์„œ ์ผ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋งจ ์ฒ˜์Œ ๋ณ€์ˆ˜ ์„ ์–ธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์„ ๋•Œ int i = 5 ์ฒ˜๋Ÿผ = ์‚ฌ์ด๋ฅผ ๋„์–ด๋ฒ„๋ฆฐ ๋ฐ”๋žŒ์— ์ดํ›„ ์˜ˆ์ œ์—์„œ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ–ˆ๋‹ค๊ฐ€ ์•ˆ ํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์„ ํ˜ผ๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ๊ณ„์† ๋„์–ด์“ฐ๊ธฐ๋ฅผ ์“ด ๊ฑด๋ฐ์š”, ์‚ฌ์‹ค ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์จ๋„ ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค.

#include <stdio.h>
int main(){int i=5;printf("%d",i);}

์ด๋ ‡๊ฒŒ ์ŠคํŽ˜์ด์Šค๋„ ์•ˆ ๋„ฃ๊ณ , ์ค„๋ฐ”๊ฟˆ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. #include๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋Š” ์ค„์€ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด๊ฑด ๋‚˜์ค‘์— ์ปดํŒŒ์ผ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋ฐฐ์šธ ๋•Œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์จ๋„ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„  ํ† ํฐํ™”๋ผ๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ํ•œ๊ตญ์–ด์˜ ๋ฌธ์žฅ์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋Š˜ ์Œ์‹์ ์— ๊ฐ€์„œ ๋ง›์žˆ๋Š” ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ๋‹ค.

์ด ๋ฌธ์žฅ์„ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ฐ€์žฅ ๋จผ์ € ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜/๋Š”/์˜ค๋Š˜/์Œ์‹์ /์—/๊ฐ€์„œ/๋ง›์žˆ๋Š”/๊ณ ๊ธฐ/๋ฅผ/๋จน์—ˆ๋‹ค

์ด ๋‹ค์Œ์— ๋‹จ์–ด๋ฅผ ํ˜•ํƒœ์†Œ๋‚˜ ์ ‘์‚ฌ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

C๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ C ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•  ๋• ๋จผ์ € ์ฝ”๋“œ๋ฅผ ํ† ํฐ(token)์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์„ ๋จผ์ € ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ† ํฐํ™”(tokenization)์ด๋ผ๊ณ ๋„ ํ•˜๊ณ  lexical analysis๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์˜ C ์ฝ”๋“œ๋ฅผ ํ† ํฐํ™” ํ•˜๋ฉด

int, main, (, ), {, int, i, =, 5, ;, printf, (, "%d", ,, i, ), ;, }

์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋„์–ด์“ฐ๊ธฐ๋‚˜ ์ค„๋ฐ”๊ฟˆ์€ ์ด ํ† ํฐ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ๋งŒ ์“ฐ์ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ช‡ ์นธ์„ ๋„๋“  ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ† ํฐ๋“ค์„ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ทธ ์‚ฌ๋žŒ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ „ ์ง€๊ธˆ๊นŒ์ง€ ์ค‘๊ด„ํ˜ธ{๋ฅผ int main()์˜ ์•„๋ž˜์— ๋ถ™์˜€์ง€๋งŒ, ์˜†์— ๋ถ™์ด๋Š” ๊ฒƒ์ด ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

int main() {
    int i = 0;
}

๋˜ ์ „ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ 4์นธ์œผ๋กœ ์ผ์ง€๋งŒ, ๊ตฌ๊ธ€์—์„  2์นธ์œผ๋กœ ์”๋‹ˆ๋‹ค.

#include <stdio.h>
int main() {
  printf("Hello, world!");
}

์ค‘๊ด„ํ˜ธ๋ฅผ ์•„๋ž˜์— ๋ถ™์ด๋Š” ๊ฒƒ์ด๋‚˜, ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ 4์นธ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ ๋ชจ๋‘ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๋งŒ๋“  C#์ด๋ผ๋Š” ์–ธ์–ด์˜ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ C# ์Šคํƒ€์ผ์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์€ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋งž๋Š” ์Šคํƒ€์ผ์„ ์ฐพ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ฝ”๋”ฉ ์Šคํƒ€์ผ๋“ค์„ ๋ณด๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ์ด ์œ„ํ‚คํ”ผ๋””์•„ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ์–ด๋–ค ์Šคํƒ€์ผ์ด๋“  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ฝ๊ธฐ ํŽธํ•˜๊ฒŒ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๊ณ , ์—ฌ๋Ÿฌ๋ถ„์ด ์–ด๋–ค ํšŒ์‚ฌ๋‚˜ ๊ธฐ๊ด€์—์„œ ์ผํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๊ทธ ๊ณณ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ธ๋ฏธ์ฝœ๋ก ์˜ ์—ญํ• 

์„ธ๋ฏธ์ฝœ๋ก ์€ ํ•˜๋‚˜์˜ ๋ฌธ์žฅ(statement)์„ ์™„์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, a = 1์€ 1์„ a์— ๋Œ€์ž…ํ•œ ํ›„ ๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋˜๋Š” ์‹(expression)์ž…๋‹ˆ๋‹ค. ์ด ์‹์€ ๋‹ค๋ฅธ ๊ณณ์— ๋„ฃ์–ด printf("%d", a = 1)๊ฐ™์ด ์ƒˆ๋กœ์šด ์‹์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ int main() { ... } ์•ˆ์—๋Š” ํ•ญ์ƒ ์‹์ด ์•„๋‹ˆ๋ผ ๋ฌธ์žฅ์ด ๋“ค์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋ฏธ์ฝœ๋ก ์€ ํ•˜๋‚˜์˜ ์‹์„ ๋ฌธ์žฅ์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, <์‹>;์€ ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Hello, "๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ "world!"๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— printf("Hello, ")์™€ printf("world!")๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘˜์„ ์„ธ๋ฏธ์ฝœ๋ก  ์—†์ด ๋ถ™์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("Hello, ")  printf("world!")
}

๊ทธ๋Ÿฐ๋ฐ, ์‹ printf("Hello, ")์™€ ์‹ printf("world!")๋ฅผ ๋ถ™์—ฌ์ค„ ์—ฐ์‚ฐ์ž๊ฐ€ ์—†๊ณ , int main() { ... } ์•ˆ์—์„  ์‹์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ์ฝ”๋“œ๋Š” ์œ ํšจํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋‘˜์„ ๋ฌธ์žฅ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    printf("Hello, ");  printf("world!");
}
Hello, world!

์„ธ๋ฏธ์ฝœ๋ก  ํ˜ผ์ž์„œ ๋ฌธ์žฅ์„ ํ•˜๋‚˜ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, int i = 5;;๋Š” ๋ฌธ์žฅ์ด int i = 5;, ;๋กœ ๋‘ ๊ฐœ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์žฅ์„ ๋นˆ ๋ฌธ์žฅ(null statement)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ณตํ•ฉ ๋Œ€์ž… ์—ฐ์‚ฐ์ž(compound assignment operator)

C ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด a = a + 2๋‚˜, b = b / 3 ์ฒ˜๋Ÿผ ์–ด๋–ค ํ•œ ๋ณ€์ˆ˜๋กœ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ทธ ๋ณ€์ˆ˜์— ์ง‘์–ด๋„ฃ๊ฒŒ ๋  ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด my_special_variable ์ฒ˜๋Ÿผ ๊ธธ๊ฒŒ ๋˜๋ฉด ์ €๋Ÿฐ ์‹์„ ์“ฐ๊ธฐ ํž˜๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ C์–ธ์–ด์—์„  ์ด๋Ÿฐ ๊ฒฝ์šฐ, ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ฒŒ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ์š”, ์ด ๋•Œ ๋ณตํ•ฉ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ดํ•ญ ์—ฐ์‚ฐ์ž @์— ๋Œ€ํ•ด, a = a @ b๊ฐ€ a @= b๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 5;
    printf("%d ", a);
    a += 2;
    printf("%d ", a);
    a -= 1;
    printf("%d ", a);
    a *= 5;
    printf("%d ", a);
    a /= 6;
    printf("%d ", a);
    a %= 2;
    printf("%d", a);
}
5 7 6 30 5 1

์›๋ž˜ a๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฐ’์ด 5์˜€๋Š”๋ฐ, ๊ฑฐ๊ธฐ์— 2๊ฐ€ ๋”ํ•ด์ ธ 7์ด ๋˜๊ณ , 1์ด ๋น ์ ธ 6์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  5๋ฅผ ๊ณฑํ•ด์ ธ 30์ด ๋˜๊ณ , 6์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ 5๊ฐ€ ๋˜์—ˆ๋„ค์š”. ๋งˆ์ง€๋ง‰์œผ๋กœ 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์ธ 1์ด a์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ณตํ•ฉ ๋Œ€์ž… ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ์œ„์˜ ์˜ˆ์ œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์“ฐ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (printf๋Š” ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค.)

int main()
{
    int a = 5;
    a = a + 2;
    a = a - 1;
    a = a * 5;
    a = a / 6;
    a = a % 2;
}

์œ„์™€ ์•„๋ž˜๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ์œ„๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œ ์—ฐ์‚ฐ์ž(increment and decrement operator)

C์—์„œ ์–ด๋–ค ๋ณ€์ˆ˜์— ๋ฌด์–ธ๊ฐ€ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ผ์ด ์žˆ๋‹ค๋ฉด, 1์„ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ผ์ด ๊ฐ€์žฅ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ C์—์„  1์„ ๋”ํ•˜๊ณ  ๋นผ๋Š” ์—ฐ์‚ฐ์ž๋„ ๋”ฐ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 5;
    printf("%d ", a);
    ++a;
    printf("%d ", a);
    a++;
    printf("%d ", a);
    --a;
    printf("%d ", a);
    a--;
    printf("%d", a);
}
5 6 7 6 5

++์„ ์‚ฌ์šฉํ•˜๋ฉด 1 ์ฆ๊ฐ€ํ•˜๊ณ , --์„ ์‚ฌ์šฉํ•˜๋ฉด 1 ๊ฐ์†Œํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ++์„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž(increment operator), --์„ ๊ฐ์†Œ ์—ฐ์‚ฐ์ž(decrement operator)๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๋‘˜์„ ํ•ฉ์ณ์„œ ํ•œ๊ตญ์–ด๋กœ ์ฆ๊ฐ์—ฐ์‚ฐ์ž๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ณ€์ˆ˜์˜ ์•ž์— ์˜จ ์ฆ๊ฐ์—ฐ์‚ฐ์ž๋ฅผ ์ „์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž(prefix increment/decrement operator)๋ผ๊ณ  ํ•˜๊ณ , ๋’ค์— ์˜จ ๊ฒƒ์„ ํ›„์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž(postfix increment/decrement operator)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ „์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž์™€ ํ›„์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด๋Š” 1์ด ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•˜๋Š” ์‹œ์ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

int main()
{
    int a = 5;
    printf("%d ", a);
    printf("%d ", ++a);
    printf("%d ", a++);
    printf("%d", a);
}
5 6 6 7

์„ธ๋ฒˆ์งธ printf ์•ˆ์—์„œ๋„ a์— ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž๋ฅผ ์ทจํ•ด์คฌ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ฆ๊ฐ€๋˜์ง€ ์•Š์€ ๊ฐ’์ด ๋‚˜์˜จ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ›„์œ„ ์ฆ๊ฐ ์—ฐ์‚ฐ์ž๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์ทจํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๊ทธ ๋ฌธ์žฅ์ด ๋๋‚œ ์งํ›„์— ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

<a์— ์ „์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์‹>;
->
a += 1;
<a๋ฅผ ์‚ฌ์šฉํ•œ ์‹>;

<a์— ํ›„์œ„ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์‹>;
->
<a๋ฅผ ์‚ฌ์šฉํ•œ ์‹>;
a += 1;

์ฆ๊ฐ์—ฐ์‚ฐ์ž๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๊ฐ„ํŽธํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํ•œ ๋ฌธ์žฅ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ๊ธฐ ํž˜๋“ค์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฆ๊ฐ์—ฐ์‚ฐ์ž๋Š” ์ ์ ˆํ•œ ํšŸ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜, ํ•œ ๋ฌธ์žฅ ๋‚ด์—์„œ ๊ฐ™์€ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์ฆ๊ฐ์—ฐ์‚ฐ์ž๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ •์˜๋˜์ง€ ์•Š์€ ํ–‰๋™์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ: ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด