반응형
Untitled Document.md

뇌를 자극하는 C# 5.0 프로그래밍 Chapter4 연습문제


1. i++와 ++i의 차이점은 무엇인가요?

i++는 해당문장 실행이 끝나면 i++를 수행한다. ++i는 해당문장이 실행되기 전에 ++i를 수행합니다. 코드로 예시를 살펴보면 다음과 같다.


1
2
3
int a = 10;
Console.WriteLine(a++); // 이 문장이 실행한 후에 a++를 수행. 이 문장은 10을 출력. 출력 후 a = 11
Console.WriteLine(++a); // 이 문장이 실행하기 전에 ++a를 수행. a = 12가 되고, 그 후 12를 출력.
cs



2. 다음 보기 중에서 결과가 다른 것을 찾으세요(코드가 실행하면 결과가 나옵니다. 고민을 좀 해본 후에 답을 확인해보세요).

  1. i = i + 1;
  2. i++;
  3. ++i;
  4. i += 1;

2번이 결과(출력)가 다르게 나온다. Consol.WriteLine으로 출력을 한다고 가정하자. i++;는 해당문장이 실행이 끝난 후에 수행되기 때문에 해당문장에서는 +1이 된 값이 출력되지 않는다. 반면에 1,2,4번은 해당문장이 실행되면 바로 결과 값을 출력할 수 있다.



3. 다음 코드에서 a와 b는 각각 얼마일까요?

1
2
int a = 8 >> 1;
int b = a >> 2;
cs

>>와 <<는 비트연산자이다. 8을 비트로 표현하면 1000이다. 8 >> 1는 1000을 오른쪽으로 한 비트 옮기라는 말이므로 0100이다. 그러므로 a는 4가 된다.(오른쪽으로 한 비트를 옮기면 2로 나누어진다는 것을 알 수 있다.)

a >> 2는 a를 오른쪽으로 두 비트 옮기라는 말이다. a는 4이고 비트로 표현하면 100이다. 오른쪽으로 두 비트 옮기면 001이 된다. 그러므로 b = 1이 된다.



4. 다음 코드에서 a는 얼마일까요?

1
int a = 0xF0 | 0x0F;
cs


|는 or비트 연산자이다. 0xF0은 16진수이다. 그러므로 2진수로 바꿔야 계산하기 편하다. 16진수 F0은 2진수로 바꾸면 11110000이다. 0F도 2진수로 바꾸면 1111이다. 두 개의 비트를 자리에 맞춰서 or연산을 하면, 11111111가 결과로 나온다. 따라서, 11111111을 10진수로 바꾸면 255임을 알 수 있다. 답은 255.



5. 다음 코드에서 b는 어떤 값을 가질까요?

1
2
int a = 10;
string b = a == 0 ? "가나다" : "ABC";
cs

두 번째 줄의 코드를 살펴보자. 연산자 우선순위를 생각하면, ==, ?:, = 순서로 연산을 수행한다는 것을 알 수 있다. 순서에 따라서 살펴보자.

a == 0을 보자. a는 10이다. 따라서, a == 0은 false(거짓)을 반환한다.
false ? “가나다” : "ABC"를 보자. false이르로 문자열 "ABC"가 반환된다. 마지막으로 string b = "ABC"가 남는다. 따라서 b는 "ABC"라는 문자열 값을 갖는다.

반응형

+ Recent posts