반응형

전체 글 2934

39. 조건문 (if, else)

C언어에서는 조건에 따라 수행할 작업을 판단하거나 반복해서 수행하는 등의 제어문을 제공해요. 조건 표현식에 따라 구문을 수행하는 조건문과 조건 표현식이 참일 동안 반복해서 구문을 수행하는 반복문, 표현식의 값에 따라 수행할 위치를 선택하는 선택문 등이 있어요. 그리고 미리 특정 코드에 대응하는 표현을 약속하는 매크로 구문을 제공하고 있어요. 이번 장에서는 제어문과 기본적인 매크로 구문을 다루기로 할게요. 조건문 if 조건문은 조건식이 참일 때 수행하는 구문이예요. 거짓일 때 수행 구문도 표현할 때 else를 사용하죠. if ( 조건 표현식) 수행 구문; if ( 조건 표현식) 수행 구문; else 수행 구문; 조건 표현식은 참인지 거짓인지 판별할 수 있는 표현을 사용해요. 조건 표현식의 값은 논리 연산에..

38. 정리하기

29. 산술 연산자 30. 논리 연산자 31. 비교 연산자 32. 비트 연산자 33. 비트 연산자 ^를 이용한 암호화 34. 쉬프트 연산자 35. 대입 연산자 36. 증감 연산자 37. 기타 연산자 1. 다음 리터럴 상수로 초기값을 설정하는 선언문 중에서 오류가 있는 것을 고르시오. a. char c = "hello"; b. int i = 'a'; c. char c = 38; d. char c = 0xC; 2. 다음 코드를 수행했을 때 출력 결과를 예측하시오. printf("%d\n", 8^8); 3. 다음 코드를 수행했을 때 출력 결과를 예측하시오. printf("%d\n", 2

37. 기타 연산자

C언어에서는 이 외에도 여러 표현식을 나열하는 쉼표 연산자와 표현식 값의 형식을 변환할 때 사용하는 형변환 연산자, 표현식의 메모리 크기를 계산하는 sizeof, 조건에 맞게 특정 표현식을 사용하는 조건부 연산자등을 제공하고 있어요. 쉼표 연산자는 변수 선언 등에서 대등한 표현식을 나열할 때 사용할 수 있어요. int i=0, j=0; ◈ 여러 개의 표현식을 나열하는 쉼표 연산자의 사용 예 #include enum _Gender{ FEMALE, MALE }; //열거형 정의문 int Compare(int a,int b); //함수 선언문 int main() { int arr[3] = {1,2,3}; //배열 선언문 int i=0, j=0; int gap=0; gap = Compare(i,j); //함수 ..

36. 증감 연산자

++, -- (증감 연산자) 증감 연산자는 단항 연산자로 1 증가하거나 1을 감소하는 연산이예요. 증감 연산을 수행하면 피연산자의 값을 변경하므로 피연산자는 l-value만 올 수 있어요. ++의 연산을 수행하면 피연산자의 값이 1 증가하고 -- 연산을 하면 1감소하죠. 증감 연산자는 연산자가 피연산자 앞에 올 수도 있고 뒤에 올 수도 있는데 위치에 따라 연산 결과가 달라요. 그리고 증감 연산자가 피연산자 앞에 올 때 전위 증감 연산자라 부르며 뒤에 올 때 후위 증감 연산자라 불러요. 전위 증감 연산이 하는 것은 피연산자의 값을 1 증감하는 것이며 연산 결과도 값을 1 증감한 피연산자예요. 하지만 후위 증감 연산에서는 피연산자의 값은 1 증감하지만 연산 결과는 연산을 수행하기 전 피연산자의 값이죠. re..

35. 대입 연산자

=, +=, -=, *=, /=, %= 등 대입 연산은 변수의 값을 설정할 때 사용하는 연산이죠. 이러한 이유로 대입 연산의 좌항에는 상수 표현은 올 수 없으며 l- value라 불러요. 대입 연산자에는 우항의 값을 좌항에 대입하는 단순 대입 연산과 좌항과 우항의 값을 더하거나 빼는 등의 연산을 수행한 후에 좌항에 대입하는 복합 대입 연산도 있어요. ◈ 복합 대입 연산 예 #include int main() { int i = 2; i += 4; // i = i + 4; 와 같은 표현 printf("i: %d \n",i); return 0; } 실행 결과 i: 6 주의할 점은 대입 연산은 모든 연산 중에 우선 순위가 가장 낮다는 것이예요. 예를 들어 i = j == 3; 구문은 j의 값이 3이면 i에 1을..

34. 쉬프트 연산자

쉬프트 연산은 좌항에 있는 피연산자를 우항에 있는 수만큼 비트 자리 이동하는 연산을 수행해요. > 는 오른쪽 쉬프트 연산자죠. 왼쪽 쉬프트 연산을 하면 좌항에 있는 피연산자의 값이 우항에 있는 수만큼 왼쪽으로 자리 이동하고 빈 자리는 0으로 채우죠. 만약 부호없는 수 3을 왼쪽으로 4자리 이동시키면 48이예요. 이진수로 생각해 보세요. 이진수 011(10진수 3)을 왼쪽으로 4자리 이동하면 이진수 0110000(10진수 48)이 되죠. 이것을 다시 16진수로 얘기하면 16진수 3(10진수 3)을 왼쪽으로 4자리 이동하면 16진수 30(10진수 48)이예요. 참고로 16진수의 한자리는 2진수 4자리를 차지하죠. 그리고 부호있는 수 -3을 왼쪽으로 4자리 이동시키면 -48이예요. 왼쪽 쉬프트 연산 수행 결과..

33. 비트 연산자 ^를 이용한 암호화

어떤 수에 같은 수로 ^ 연산을 두 번 하면 원래 수가 되는 특징이 있어요. 이를 이용하면 간단한 암호화와 복호화를 할 수 있죠. 이처럼 같은 키를 암호화와 복호화에 사용하는 것을 대칭형 암호화라 불러요. ◈ 간단한 대칭형 암호화 #include int main() { int original = 0x12345678; //원본 데이터 int cryptograph = 0; //암호화 데이터 int decrypt = 0; //복화화 데이터 int key = 0x394A38C9; //암호화와 복호화에 사용할 키 printf("원본 데이터: %#X \n",original); cryptograph = original ^ key; //암호화 printf("암호화 데이터: %#X \n",cryptograph); dec..

32. 비트 연산자

&, |, ^ , ~ C언어에서는 비트 단위로 논리 연산을 수행하는 비트 연산을 제공하고 있어요. 비트 연산의 피연산자는 정수 형식이 올 수 있어요. 이항 연산자 &는 비트 단위로 논리곱 연산을 수행하죠. 예를 들어 6&5를 하면 6은 이진수로 110이고 5는 이진수로 101이므로 6&5의 연산 결과는 이진수 100이고 10진수 4예요. 이항 연산자 | 는 비트 단위로 논리합 연산을 수행하죠. 예를 들어 6|5의 연산 결과는 이진수 111 이고 10진수 7이예요. 이항 연산자 ^는 비트 단위로 상호 배타 논리 연산을 수행하죠. 즉 같은 자리의 비트가 서로 다르면 1, 같으면 0 이예요. 예를 들어 6^5의 연산 결과는 이진수 011 이고 10진수 3이예요. 단항 연산자 ~는 1인 자리는 0으로 0인 자리..

31. 비교 연산자

, >= , ==, != C언어에서 비교 연산은 이항 연산자로 피연산자의 값의 크기를 비교하며 연산 결과는 참일 때 1, 거짓일 때 0이예요. 연산자를 보면 쉽게 알 수 있듯이 = 우항이 크거나 같은지 비교, == 서로 같은지 비교, != 다른지 비교하는 연산자예요. 그리고 =, ==, != 연산자를 사용할 때 중간에 공백은 올 수 없어요. ◈ 비교 연산 #include int main() { printf("12 연산 결과:%d \n", 1>2); printf("1>=2 연산 결과:%d \n", 1>=2); printf("1==2 연산 결과:%d \n", 1==2); printf("1!=2 연산 결과:%d \n", 1!=2); return 0; } ◈ 실..

30. 논리 연산자

&&, ||, ! C언어에서는 논리 연산자로 논리곱(&&) 연산자와 논리합(||) 연산자, 논리 부정(!) 연산자를 제공해요. C언어에서 피 연산자의 값이 0이면 거짓이며 그 외의 값은 참이예요. 그리고 연산식이 참일 때 연산 결과는 1이고 거짓일 때 연산 결과는 0이랍니다. 논리곱 연산은 피 연산자가 모두 참일 때만 연산 결과가 참이고 그 외에는 모두 거짓이예요. 논리합 연산은 피 연산자 중에 하나라도 참이면 연산 결과는 참이고 둘 다 거짓일 때만 거짓이죠. 논리 부정은 단항 연산자로 피 연산자가 참이면 연산 결과는 거짓이고 피 연산자가 거짓이면 연산 결과는 참이예요. ◈ 논리 연산 #include int main() { printf("%d %d %d \n", 3&&2, 0&&2, 0&&0); prin..

반응형