C言語에서의 단항 연산자

안녕하세요, 미래의 코딩 슈퍼스타들! 오늘, 우리는 C言語에서의 단항 연산자의 세계로 흥미진진한 여정을 떠날 거예요. 프로그래밍에 새로운 사람이라도 걱정하지 마세요 – 저는 여러분의 친절한 가이드가 될 거고, 이 주제를 단계별로 탐험할 거예요. 그럼, 가상의 배낭을 준비하고, 시작해볼까요!

C - Unary Operators

C言語에서의 증가 연산자

우리는 증가 연산자로 시작해볼게요. 이 연산자는 우리의 변수에 대한 마법의 "+1" 버튼 같아요. C言語에서는 "++"를 사용하여 값을 증가시킵니다. 우리가 물건을 세우거나 시퀀스를 이동하고 싶을 때 매우 유용해요.

증가 연산자를 사용하는 방법이 두 가지 있어요:

  1. 전위 증가: ++변수
  2. 후위 증가: 변수++

이제 몇 가지 예제를 살펴보죠:

#include <stdio.h>

int main() {
int cookies = 5;

printf("저는 %d 개의 쿠키가 있어요.\n", cookies);

// 전위 증가
printf("하나 먹고 나면: %d\n", ++cookies);

// 후위 증가
printf("현재 개수: %d\n", cookies++);
printf("계산 후: %d\n", cookies);

return 0;
}

출력:

저는 5 개의 쿠키가 있어요.
하나 먹고 나면: 6
현재 개수: 6
계산 후: 7

이 예제에서, 우리는 5개의 쿠키로 시작해요. 전위 증가(++cookies)를 사용하면, 사용하기 전에 즉시 값이 증가합니다. 후위 증가(cookies++)는 현재 값이 사용된 후에 값이 증가합니다.

C言語에서의 감소 연산자

이제, 감소 연산자를 만나보죠. 이 연산자는 증가 연산자의 깊은 복제라고 할 수 있죠. 반대로 – 우리의 변수에서 1을 뺍니다. 이 연산자는 "--"를 사용합니다.

증가 연산자처럼, 이도 두 가지 형태가 있어요:

  1. 전위 감소: --변수
  2. 후위 감소: 변수--

이제 실제로 보죠:

#include <stdio.h>

int main() {
int lives = 3;

printf("당신은 %d 개의 목숨이 있어요.\n", lives);

// 전위 감소
printf("이런! 하나 잃었어요: %d\n", --lives);

// 후위 감소
printf("현재 목숨: %d\n", lives--);
printf("게임 오버: %d\n", lives);

return 0;
}

출력:

당신은 3 개의 목숨이 있어요.
이런! 하나 잃었어요: 2
현재 목숨: 2
게임 오버: 1

이 예제에서, 우리는 가상의 게임에서 3개의 목숨으로 시작해요. 전위 감소(--lives)는 즉시 수를 줄이고, 후위 감소(lives--)는 현재 값이 사용된 후에 수를 줄입니다.

C言語에서의 단항 더하기 연산자(+)

단항 더하기 연산자는 처음에는 좀 충분하지 않을 수 있습니다. 결국, 양수는 이미... 양수니까요? 하지만, 이 연산자는 다른 데이터형식들과 작업할 때 특히 유용합니다.

#include <stdio.h>

int main() {
int num = 42;
float pi = 3.14;

printf("양수 int: %d\n", +num);
printf("양수 float: %f\n", +pi);

return 0;
}

출력:

양수 int: 42
양수 float: 3.140000

이 예제에서, 단항 더하기는 값들을 변경하지 않지만, 그들이 양수로 취급되도록 보장합니다. 이는 우리의 변수에 대한 좀 더 큰 격려를 줄 수 있습니다: "양수를 지켜, 친구!"

C言語에서의 단항 마이너스 연산자(-)

단항 마이너스 연산자는 마법의 지팡이처럼 양수를 음수로 (그리고 반대로) 전환합니다. 우리가 값의 부호를 뒤집고 싶을 때 매우 유용합니다.

#include <stdio.h>

int main() {
int temperature = 25;
float balance = -100.50;

printf("원래 온도: %d\n", temperature);
printf("영점 아래: %d\n", -temperature);

printf("원래 잔고: %.2f\n", balance);
printf("채무 청산: %.2f\n", -balance);

return 0;
}

출력:

원래 온도: 25
영점 아래: -25
원래 잔고: -100.50
채무 청산: 100.50

보시죠? 따뜻한 날을 추위로, 그리고 채무를 작은 마이너스 기호 하나로 청산할 수 있죠? 그게 단항 마이너스 연산자의 힘!

C言語에서의 주소 연산자(&)

이제, 약간 더 고급한 주제에 들어가볼게요 – 주소 연산자. 이 작은 앰퍼센트(&)는 우리의 변수가 컴퓨터 메모리의 어느 곳에 위치하는지 정확히 알려줍니다.

#include <stdio.h>

int main() {
int age = 25;
float height = 1.75;

printf("나이 값: %d\n", age);
printf("나이 주소: %p\n", (void*)&age);

printf("키 값: %.2f\n", height);
printf("키 주소: %p\n", (void*)&height);

return 0;
}

출력 (주의: 실제 주소는 다를 수 있습니다):

나이 값: 25
나이 주소: 0x7ffd5e8e3994
키 값: 1.75
키 주소: 0x7ffd5e8e3998

이 예제에서, 우리는 단지 변수의 값을 보는 것이 아니라, 메모리의 특정 위치에 숨겨진 가치를 훔쳐보고 있습니다. 멋지죠?

C言語에서의 참조 연산자(*)

참조 연산자는 트레asure 맵처럼 – 특정 메모리 주소에 숨겨진 가치를 찾는 데 도움을 주는 것입니다. 이는 우리의 주소 연산자의 친구입니다.

#include <stdio.h>

int main() {
int treasure = 1000;
int *map = &treasure;

printf("보물 값: %d\n", treasure);
printf("지도가 가리키는 곳: %p\n", (void*)map);
printf("찾은 보물: %d\n", *map);

*map = 2000;  // 보물을 변경하자!
printf("새로운 보물 값: %d\n", treasure);

return 0;
}

출력:

보물 값: 1000
지도가 가리키는 곳: 0x7ffd5e8e3994
찾은 보물: 1000
새로운 보물 값: 2000

이 예제에서, 우리의 '지도'(포인터)는 보물을 가리키며, 참조 연산자를 사용하여 보물의 값을 변경할 수 있습니다. 마법 같죠?

C言語에서의 논리 NOT 연산자(!)

논리 NOT 연산자는rebels 같아 – 참을 거짓으로, 거짓을 참으로 전환합니다. C言語에서는 0이 아닌 모든 값은 참으로 간주되고, 0은 거짓입니다.

#include <stdio.h>

int main() {
int sunny = 1;  // 1은 참
int rainy = 0;  // 0은 거짓

printf("비가 내리나요? %d\n", sunny);
printf("비가 내리지 않나요? %d\n", !sunny);

printf("햇살이 나나요? %d\n", rainy);
printf("햇살이 아니라나요? %d\n", !rainy);

return 0;
}

출력:

비가 내리나요? 1
비가 내리지 않나요? 0
햇살이 나나요? 0
햇살이 아니라나요? 1

보시죠? 논리 NOT 연산자가 날씨 조건을 뒤집어버리죠? 이는 "반대일" 버튼을 가지는 것 같아!

C言語에서의 1의 보수 연산자(~)

마지막으로, 1의 보수 연산자에 대해 이야기해볼게요. 이 연산자는 숫자의 모든 비트를 뒤집어 – 0을 1로, 1을 0으로 전환합니다. 이는 바이너리 숫자에 완벽한 개행을 주는 것 같아요!

#include <stdio.h>

int main() {
unsigned char a = 5;  // 바이너리: 00000101
unsigned char b = ~a; // 바이너리: 11111010

printf("원래 값: %d\n", a);
printf("보수 값: %d\n", b);

printf("바이너리 표현:\n");
printf("a: ");
for (int i = 7; i >= 0; i--) {
printf("%d", (a >> i) & 1);
}
printf("\nb: ");
for (int i = 7; i >= 0; i--) {
printf("%d", (b >> i) & 1);
}
printf("\n");

return 0;
}

출력:

원래 값: 5
보수 값: 250
바이너리 표현:
a: 00000101
b: 11111010

이 예제에서, 우리는 1의 보수 연산자가 모든 비트를 뒤집는 것을 볼 수 있습니다. 이는 바이너리 숫자를 내부로 뒤집는 것 같아요!

그리고 그렇습니다! 우리는 C言語에서의 모든 단항 연산자를 탐험했습니다. 기억해요, 연습만큼이나 완벽한 것이 있습니다. 그래서 이 연산자들을 자신의 코드에서 실험해보는 것을怕하지 마세요. 코딩 잘하고, 단항 연산자가 도와드릴 거예요!

연산자 이름 설명
++ 증가 값에 1을 추가
-- 감소 값에서 1을 뺍니다
+ 단항 더하기 양수 값을 나타냅니다 (가끔 사용)
- 단항 마이너스 표현식을 부정합니다
& 주소-of 변수의 메모리 주소를 반환합니다
* 참조 포인터 주소에 있는 값을 접근합니다
! 논리 NOT 표현식의 논리 상태를 반전합니다
~ 비트별 NOT (1의 보수) 모든 비트를 뒤집습니다

Credits: Image by storyset