|
| 1 | +--- |
| 2 | +title: "타입, 변수, 연산" |
| 3 | +--- |
| 4 | + |
| 5 | +[:material-arrow-left-bold: 글 목록](../index.md){ .md-button } |
| 6 | + |
| 7 | +## 타입 |
| 8 | + |
| 9 | +모든 프로그래밍 언어에는 언어에서 사용할 수 있도록 내부적으로 구현되어있는 타입이 존재한다. 예를 들어, 숫자 계산을 위해 정수 및 실수 타입이 지원되기도 하고, 문자열 처리를 위해 문자 및 문자열 타입이 지원되기도 한다. 아래의 탭에서는 언어 별로 자주 사용되는 타입에 대해 소개한다. |
| 10 | + |
| 11 | +=== "python" |
| 12 | + |
| 13 | + ``` python |
| 14 | + # 숫자 |
| 15 | + |
| 16 | + 1 |
| 17 | + 3.6 |
| 18 | + 1e5 |
| 19 | + 12323123123123123123123123123 # 아주 큰 정수도 내부적으로 지원해준다. |
| 20 | + |
| 21 | + # 문자열 |
| 22 | + |
| 23 | + 'b' |
| 24 | + 'asdf' |
| 25 | + "asdf" # 작은 따옴표와 큰 따옴표가 구분되지 않는다. |
| 26 | + '''a |
| 27 | + b |
| 28 | + c |
| 29 | + d''' # 여러 줄로 된 문자열을 만들고 싶으면 작은 따옴표를 세 번 사용하면 된다. |
| 30 | + """a |
| 31 | + b |
| 32 | + c""" # 큰 따옴표를 세 번 써도 상관 없다. |
| 33 | + |
| 34 | + # boolean |
| 35 | + # 대문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다. |
| 36 | + True |
| 37 | + False |
| 38 | + ``` |
| 39 | + |
| 40 | +=== "javascript" |
| 41 | + |
| 42 | + ``` js |
| 43 | + // 숫자 |
| 44 | + |
| 45 | + 1 |
| 46 | + 3.6 |
| 47 | + 1e5 |
| 48 | + 12323123123123123123123123123 |
| 49 | + // 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다. |
| 50 | + // 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다. |
| 51 | + |
| 52 | + // 문자열 |
| 53 | + |
| 54 | + 'b' |
| 55 | + 'asdf' |
| 56 | + "asdf" // 작은 따옴표와 큰 따옴표가 구분되지 않는다. |
| 57 | + `a |
| 58 | + b |
| 59 | + c |
| 60 | + d` // 여러 줄로 된 문자열을 만들고 싶으면 백틱을 사용한다. |
| 61 | + |
| 62 | + // boolean |
| 63 | + // 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다. |
| 64 | + true |
| 65 | + false |
| 66 | + ``` |
| 67 | + |
| 68 | +=== "C#" |
| 69 | + |
| 70 | + ``` cs |
| 71 | + // 숫자 |
| 72 | + |
| 73 | + 1; |
| 74 | + 3.6; |
| 75 | + 1e5; |
| 76 | + 12323123123123123123123123123; |
| 77 | + // 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다. |
| 78 | + // 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다. |
| 79 | + |
| 80 | + # 문자열 |
| 81 | + |
| 82 | + 'b'; // 문자 하나는 작은 따옴표로 감싼다. |
| 83 | + "asdf"; // 문자열은 큰 따옴표로 감싼다. |
| 84 | + @"a |
| 85 | + b |
| 86 | + c |
| 87 | + d"; // 여러 줄로 된 문자열을 만들고 싶으면 앞에 @ 기호를 붙이면 된다. |
| 88 | + |
| 89 | + // boolean |
| 90 | + // 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다. |
| 91 | + true; |
| 92 | + false; |
| 93 | + ``` |
| 94 | + |
| 95 | +=== "C++" |
| 96 | + |
| 97 | + ``` cpp |
| 98 | + // 숫자 |
| 99 | + |
| 100 | + 1; |
| 101 | + 3.6; |
| 102 | + 1e5; |
| 103 | + 12323123123123123123123123123; |
| 104 | + // 아주 큰 정수도 사용할 수는 있지만, 이를 위해서는 신경써주어야 하는 것이 있다. |
| 105 | + // 이에 대해서는 이후에 큰 수를 사용하는 상황에서서 좀 더 자세히 설명하도록 하겠다. |
| 106 | + |
| 107 | + # 문자열 |
| 108 | + |
| 109 | + 'b'; // 문자 하나는 작은 따옴표로 감싼다. |
| 110 | + "asdf"; // 문자열은 큰 따옴표로 감싼다. |
| 111 | + R"(a |
| 112 | + b |
| 113 | + c |
| 114 | + d)"; // 여러 줄로 된 문자열을 만들고 싶으면 앞에 R을 붙이고, 큰 따옴표 안의 내용물을 괄호로 묶어주면 된다. |
| 115 | + |
| 116 | + // boolean |
| 117 | + // 소문자로 시작하고, 따옴표를 쓰지 않고 있다는 것에 유의해야 한다. |
| 118 | + true; |
| 119 | + false; |
| 120 | + ``` |
| 121 | + |
| 122 | +## 변수 |
| 123 | + |
| 124 | +변수는 쉽게 말하면 값을 담는 그릇이다. 다음과 같이 사용한다. |
| 125 | + |
| 126 | +=== "python" |
| 127 | + |
| 128 | + ``` python |
| 129 | + # 파이썬에서는 변수를 선언할때 특별히 신경써주어야 하는 것이 없다. |
| 130 | + # 변수에 어떤 타입의 값이 들어갔는지는 이후 코드를 실행하면서 내부적으로 판별한다. |
| 131 | + |
| 132 | + a = 1 # a라는 변수에 1이라는 값을 넣었다고 생각하면 된다. |
| 133 | + b, c = 2.5, 'hello' # 여러 변수를 콤마로 구분하여 선언할 수 있다. |
| 134 | + a = False # 이미 값을 할당했던 변수에도 다른 값을 넣을 수 있다. |
| 135 | + ``` |
| 136 | + |
| 137 | +=== "javascript" |
| 138 | + |
| 139 | + ``` js |
| 140 | + // 자바스크립트에서는 변수를 선언할때 앞에 let, const같은 구문을 써서 변수를 선언한다. |
| 141 | + // 변수에 어떤 타입의 값이 들어갔는지는 이후 코드를 실행하면서 내부적으로 판별한다. |
| 142 | + |
| 143 | + // 그리고 자바스크립트에서는 줄을 구분할때 세미콜론(`;`)을 붙여도 되고, 붙이지 않아도 된다. |
| 144 | + // 다른 여러 언어들에서 줄 구분에 세미콜론을 사용하는 것을 따왔으나, 실제 코드를 실행하는 |
| 145 | + // 과정에서는 무시하고 넘어간다고 생각해도 좋다. 일반적으로는 세미콜론을 사용하는 것이 좋지만, |
| 146 | + // 사용하지 않아도 그러려니 할 수 있으며, 되도록이면 가독성을 위해 코드 전체에서 일관성은 |
| 147 | + // 유지해주어야 한다. |
| 148 | + |
| 149 | + let a = 1; // `a`라는 변수에 1이라는 값을 넣었다고 생각하면 된다. |
| 150 | + const b = 2.5, c = 'hello' // 여러 변수를 콤마로 구분하여 선언할 수 있다. |
| 151 | + |
| 152 | + a = true; // 이미 앞에서 a라는 변수를 선언했으므로 선언 구문을 붙이지 않는다. |
| 153 | + let a = true; // <- x. 앞서 사용한 변수 이름을 다시 쓸 수 없다. 이후 코드 작동시 에러가 발생한다. |
| 154 | + |
| 155 | + b = true; // <- x. const로 선언한 변수에는 값을 다시 할당할 수 없다. 코드 작동시 에러가 발생한다. |
| 156 | + ``` |
| 157 | + |
| 158 | +=== "C#" |
| 159 | + |
| 160 | + ``` cs |
| 161 | + // C#, 혹은, 씨샾에서는 변수를 선언할때 앞에 타입을 같이 적는다. |
| 162 | + // 이렇게 선언한 변수는 타입이 고정되므로 다른 타입의 값을 넣을 수 없다. |
| 163 | + // 어떤 타입을 사용할 수 있는지는 아래 코드에서 설명하겠다. |
| 164 | + |
| 165 | + // 그리고 C#에서는 줄을 구분할때 세미콜론(`;`)을 붙여야 한다. |
| 166 | + |
| 167 | + int i; // int 타입으로 `a`라는 변수를 선언했다. int는 integer, 즉, 정수를 의미한다. |
| 168 | + i = 3; // a라는 변수에 3이라는 값을 할당했다. |
| 169 | + i = 10000000000; // <- x. int는 -2,147,483,648 ~ 2,147,483,647 값만 표현 가능하다. 코드 작동시 에러가 발생한다. |
| 170 | + |
| 171 | + // int 타입은 -2^31 ~ (2^31)-1 사이의 정수, 즉, 2^32개의 정수만 표현 가능하다. |
| 172 | + // 더 큰 정수를 사용하고 싶으면 `long long`이라는 타입을 사용하면 된다. |
| 173 | + // `long` 타입은 -2^63 ~ (2^63)-1 범위의 정수를 표현할 수 있다. |
| 174 | + // 즉, -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 값을 쓸 수 있다. |
| 175 | + // 편하게는 19자리 정수를 쓸 수 있다고 생각하도록 하자. |
| 176 | + long l = 112233445566778899; |
| 177 | + |
| 178 | + double d = 1.23; // 실수는 double 타입으로 선언하면 된다. |
| 179 | + |
| 180 | + char c = 'a', cc = 'b'; // 문자 하나는 char 타입으로 선언한다. 타입이 같은 변수를 콤마로 구분하여 선언할 수 있다. |
| 181 | + string s = "str"; // 문자열은 string 타입으로 선언한다. |
| 182 | + |
| 183 | + bool b = true; // boolean값(불리언 값, 혹은, 논리값)은 bool 타입으로 선언한다. |
| 184 | + b = 10000; // <- x. b는 bool 타입으로 선언되었으므로 int값을 넣으려고 하면 코드 작동시 에러가 발생한다. |
| 185 | + |
| 186 | + var x = 42; // var로 타입을 지정하면 어떤 값을 할당했는지 보고 자동으로 타입을 맞춰준다. |
| 187 | + ``` |
| 188 | + |
| 189 | +=== "C++" |
| 190 | + |
| 191 | + ``` cpp |
| 192 | + // C++, 혹은, 씨쁠쁠에서는 변수를 선언할때 앞에 타입을 같이 적는다. |
| 193 | + // 이렇게 선언한 변수는 타입이 고정되므로 다른 타입의 값을 넣을 수 없다. |
| 194 | + // 어떤 타입을 사용할 수 있는지는 아래 코드에서 설명하겠다. |
| 195 | + |
| 196 | + // 그리고 C++에서는 줄을 구분할때 세미콜론(`;`)을 붙여야 한다. |
| 197 | + |
| 198 | + int i; // int 타입으로 `a`라는 변수를 선언했다. int는 integer, 즉, 정수를 의미한다. |
| 199 | + i = 3; // a라는 변수에 3이라는 값을 할당했다. |
| 200 | + i = 10000000000; // <- x. int는 -2,147,483,648 ~ 2,147,483,647 값만 표현 가능하다. 코드 작동시 에러가 발생한다. |
| 201 | + |
| 202 | + // int 타입은 -2^31 ~ (2^31)-1 사이의 정수, 즉, 2^32개의 정수만 표현 가능하다. |
| 203 | + // 더 큰 정수를 사용하고 싶으면 `long long`이라는 타입을 사용하면 된다. |
| 204 | + // `long long` 타입으로는 -2^63 ~ (2^63)-1 사이의 정수를 사용할 수 있는데, |
| 205 | + // 정확히는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 값을 쓸 수 있다. |
| 206 | + // 편하게는 19자리 정수를 쓸 수 있다고 생각하도록 하자. |
| 207 | + long long ll = 112233445566778899; |
| 208 | + |
| 209 | + double d = 1.23; // 실수는 double 타입으로 선언하면 된다. |
| 210 | + float f = 1.23; // float도 사용할 수 있다. 다만 double이 좀 더 정밀한 소수점 표현이 가능하다. |
| 211 | + |
| 212 | + char c = 'a', cc = 'b'; // 문자 하나는 char 타입으로 선언한다. 타입이 같은 변수를 콤마로 구분하여 선언할 수 있다. |
| 213 | + |
| 214 | + // c++에서 문자열을 사용하려면 조금 귀찮은 절차를 거쳐야 한다. |
| 215 | + // 이곳에서는 사용 방법만 간단히 설명하고, 자세한 내용은 이후에 구체적으로 다루도록 한다. |
| 216 | + // 1. char* 이용 |
| 217 | + char* str1 = "str"; // char 타입 포인터를 사용했다. |
| 218 | + // 2. char[] 이용 |
| 219 | + char str2[4] = "str"; // char 배열을 사용했다. |
| 220 | + // 3. string 표준 라이브러리 활용 |
| 221 | + #include <string> // 이 줄과 |
| 222 | + using namespace std; // 이 줄로 string이 들어있는 라이브러리를 불러와서 string 타입을 사용할 수 있게 되었다. |
| 223 | + string str3 = "str"; // string 타입으로 변수를 선언했다. |
| 224 | + |
| 225 | + bool b = true; // boolean값(불리언 값, 혹은, 논리값)은 bool 타입으로 선언한다. |
| 226 | + b = 10000; // <- x. b는 bool 타입으로 선언되었으므로 int값을 넣으려고 하면 코드 작동시 에러가 발생한다. |
| 227 | + |
| 228 | + auto x = 42; // auto로 타입을 지정하면 어떤 값을 할당했는지 보고 자동으로 타입을 맞춰준다. |
| 229 | + ``` |
| 230 | + |
| 231 | +## 연산 |
| 232 | + |
| 233 | +변수들을 사용하여 여러 연산들이 가능하다. 타입마다 지원되는 연산들이 다른데, 여기에서는 자주 사용되는 연산자들을 설명하도록 하겠다. |
| 234 | + |
| 235 | +=== "python" |
| 236 | + |
| 237 | + ``` python |
| 238 | + a = 1 |
| 239 | + b = 2 |
| 240 | + c = a + b # a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다. |
| 241 | + d = a - b # d에는 1 - 2인 -1이 들어있다. |
| 242 | + e = 2 * 3 # e에는 2 * 3인 6이 들어있다. |
| 243 | + f = 2 / 3 # f에는 2 / 3인 0.66666..이 들어있다. |
| 244 | + g = 5 % 3 # g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다. |
| 245 | + h = 5 // 3 # h에는 5를 3으로 나눈 몫인 1이 들어있다. |
| 246 | + |
| 247 | + i = 1 # i에 1이 들어있다. |
| 248 | + i = i + 1 # i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다. |
| 249 | + i += 2 # i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 2 + 2 = 4가 된다. |
| 250 | + i *= 2 # 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 8이 된다. |
| 251 | + i //= 3 # 몫 계산도 비슷하게 할 수 있다. 계산 후 i는 2다. |
| 252 | + |
| 253 | + j, k = True, False |
| 254 | + l = j and k # and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False. |
| 255 | + m = j or k # or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True. |
| 256 | + j = not j # not 연산. True는 False로, False는 True로 바꿔준다. j가 False가 된다. |
| 257 | + |
| 258 | + # 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다. |
| 259 | + ``` |
| 260 | + |
| 261 | +=== "javascript" |
| 262 | + |
| 263 | + ``` js |
| 264 | + let a = 1; |
| 265 | + let b = 2; |
| 266 | + let c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다. |
| 267 | + let d = a - b; // d에는 1 - 2인 -1이 들어있다. |
| 268 | + let e = 2 * 3; // e에는 2 * 3인 6이 들어있다. |
| 269 | + let f = 2 / 3; // f에는 2 / 3인 0.66666..이 들어있다. |
| 270 | + let g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다. |
| 271 | + let h = Math.floor(5 / 3); // js에서는 나누기의 몫을 구하기 위해 우선 나누기를 한 다음 내림을 해야 한다. |
| 272 | + |
| 273 | + let i = 1; // i에 1이 들어있다. |
| 274 | + i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다. |
| 275 | + i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다. |
| 276 | + let i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다. |
| 277 | + let i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다. |
| 278 | + i--; // i에서 1을 뺐다. i가 4가 된다. |
| 279 | + i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다. |
| 280 | + i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다. |
| 281 | + |
| 282 | + let j = true, k = false; |
| 283 | + let l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False. |
| 284 | + let m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True. |
| 285 | + j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다. |
| 286 | + |
| 287 | + // 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다. |
| 288 | + ``` |
| 289 | + |
| 290 | +=== "C#" |
| 291 | + |
| 292 | + ``` cs |
| 293 | + int a = 1; |
| 294 | + int b = 2; |
| 295 | + int c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다. |
| 296 | + int d = a - b; // d에는 1 - 2인 -1이 들어있다. |
| 297 | + int e = 2 * 3; // e에는 2 * 3인 6이 들어있다. |
| 298 | + int f1 = 2 / 3; // f1에는 2 / 3인 0.66666..이 들어있기를 기대할 수 있으나, f1은 정수다. 그래서 나머지 몫인 0이 들어간다. |
| 299 | + double f2 = 2 / 3; // f2는 double로 선언했으니 0.66666..이 들어있었으면 좋겠지만, 여기에도 0이 들어간다. |
| 300 | + double f3 = 2.0 / 3; // 위의 두 값이 0이 나왔던 이유는 `정수 나누기`였기 때문. 둘 중 한 값이라도 실수여야 실수값이 들어간다. |
| 301 | + double f4 = 2 / 3.0; // 이렇게 해도 0.66666..이 나온다. |
| 302 | + double f5 = 2.0 / 3.0; // 이렇게 해도 0.66666..이 나온다. |
| 303 | + int g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다. |
| 304 | + int h = 5 / 3; // 앞서 설명한 정수 나누기가 되어 h에 몫이 들어간다. h는 1이다. |
| 305 | + |
| 306 | + var i = 1; // i에 1이 들어있다. |
| 307 | + i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다. |
| 308 | + i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다. |
| 309 | + var i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다. |
| 310 | + var i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다. |
| 311 | + i--; // i에서 1을 뺐다. i가 4가 된다. |
| 312 | + i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다. |
| 313 | + i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다. |
| 314 | + |
| 315 | + bool j = true, k = false; |
| 316 | + bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False. |
| 317 | + bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True. |
| 318 | + j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다. |
| 319 | + |
| 320 | + // 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다. |
| 321 | + ``` |
| 322 | + |
| 323 | +=== "C++" |
| 324 | + |
| 325 | + ``` cpp |
| 326 | + int a = 1; |
| 327 | + int b = 2; |
| 328 | + int c = a + b; // a에 1, b에 2가 들어있으니 c에는 1 + 2인 3이 들어있다. |
| 329 | + int d = a - b; // d에는 1 - 2인 -1이 들어있다. |
| 330 | + int e = 2 * 3; // e에는 2 * 3인 6이 들어있다. |
| 331 | + int f1 = 2 / 3; // f1에는 2 / 3인 0.66666..이 들어있기를 기대할 수 있으나, f1은 정수다. 그래서 나머지 몫인 0이 들어간다. |
| 332 | + double f2 = 2 / 3; // f2는 double로 선언했으니 0.66666..이 들어있었으면 좋겠지만, 여기에도 0이 들어간다. |
| 333 | + double f3 = 2.0 / 3; // 위의 두 값이 0이 나왔던 이유는 `정수 나누기`였기 때문. 둘 중 한 값이라도 실수여야 실수값이 들어간다. |
| 334 | + double f4 = 2 / 3.0; // 이렇게 해도 0.66666..이 나온다. |
| 335 | + double f5 = 2.0 / 3.0; // 이렇게 해도 0.66666..이 나온다. |
| 336 | + int g = 5 % 3; // g에는 5를 3으로 나눈 나머지인 2가 들어있다. 모듈로라고 한다. |
| 337 | + int h = 5 / 3; // 앞서 설명한 정수 나누기가 되어 h에 몫이 들어간다. h는 1이다. |
| 338 | + |
| 339 | + auto i = 1; // i에 1이 들어있다. |
| 340 | + i = i + 1; // i에 원래 i값에 1을 더한 값을 대입하라는 뜻이다. 즉, 이 계산을 마치고 나면 i에는 2가 들어있다. |
| 341 | + i++; // i에 1을 더하는 것은 특별히 이렇게 더 줄일 수 있다. i가 3이 된다. |
| 342 | + auto i1 = i++; // 이렇게 변수에 값을 넣는 것도 가능하다. i1에 원래의 i값인 3을 넣고, 그 다음 i에 1을 더해서 i가 4가 된다. |
| 343 | + auto i2 = ++i; // ++연산자가 변수 앞에 붙었다. i에 1을 더하는 시행을 먼저 해서 i가 5가 되고, 그 다음 i2에 i값인 5를 넣는다. |
| 344 | + i--; // i에서 1을 뺐다. i가 4가 된다. |
| 345 | + i += 2; // i = i + 2를 줄여서 쓴 것이라고 보면 된다. 위에서 i가 2가 되었으므로, 여기서는 4 + 2 = 6이 된다. |
| 346 | + i *= 2; // 곱하기도 같은 방식으로 쓸 수 있다. 계산 후 i는 12가 된다. |
| 347 | + |
| 348 | + bool j = true, k = false; |
| 349 | + bool l = j && k; // and 연산. 둘 다 True인 경우에만 계산 값이 True가 되고, 그 외에는 False다. l은 False. |
| 350 | + bool m = j || k; // or 연산. 둘 다 False인 경우에만 계산 값이 False가 되고, 그 외에는 True다. m은 True. |
| 351 | + j = !j; // not 연산. true는 false로, false는 true로 바꿔준다. j가 false가 된다. |
| 352 | + |
| 353 | + // 이 외에도 정말 다양한 연산들이 있는데, 이는 다른 연산을 활용하는 경우에 좀 더 자세히 다루도록 하겠다. |
| 354 | + ``` |
| 355 | + |
| 356 | +[:material-arrow-left-bold: 글 목록](../index.md){ .md-button } |
0 commit comments