뇌를 자극하는 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. 다음 보기 중에서 결과가 다른 것을 찾으세요(코드가 실행하면 결과가 나옵니다. 고민을 좀 해본 후에 답을 확인해보세요).
- i = i + 1;
- i++;
- ++i;
- 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"라는 문자열 값을 갖는다.
'programming' 카테고리의 다른 글
프로젝트 오일러(Project Euler) 22번 문제 (0) | 2016.01.04 |
---|---|
뇌를 자극하는 C# 5.0 프로그래밍 Chapter5 연습문제 풀이 (0) | 2016.01.04 |
[안드로이드]안드로이드 4대 컴포넌트 (3) | 2015.11.06 |
[안드로이드]Android SDK version (0) | 2015.11.05 |
[안드로이드]프로세스와 스레드 (0) | 2015.11.04 |