Do it! 자바 완전 정복
[Do it! 자바 완전 정복] 3장 개념 복습 + 연습문제
가은(JANE)
2025. 2. 20. 09:45
* 연산자 종류
자료형 | 연산기호 | 기능 | 결과 |
산술 연산자 | +, - , *, /, % | 사칙연산 및 나머지 연산 | 값 |
증감 연산자 | ++ , -- | 값이 1씩 증가 및 감소 | |
비트 연산자 | &, |, ~, ^ | 비트 AND< OR, NOT, XOR | |
시프트 연산자 | >>, <<, >>> | 비트 단위의 이동 | |
비교 연산자 | <, >, <=, >=, ==, != | 값의 크기 비교 | 참 또는 거짓 |
논리 연산자 | &&, ||, !, ^ | 논리 AND, OR, NOT, XOR | |
대입 연산자 | =, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>= | 산술 연산 결과의 대입 (연산자 + '='의 축약표현) | 실행 |
삼향 연산자 | (참 또는 거짓) ? x : y | 참일 때 X, 거짓일 때 Y |
* 비트 연산자 이해하기
- And(&) : 두 값이 모두 1일 때만 1반환
- OR(|) : 두 값이 모두 0일 때만 0반환
- XOR(^) : 두 값이 같을 때 0, 다를 때 1 반환
- NOT(~) : 0은 1, 1은 0반환
* 전위형 후위형 이해하기
- 동일한 결과를 출력할 때
int a = 3;
++a; // a 값에 1을 더하라는 명령 1개(전위형, 후위형 차이 없음)
System.out.println(a); // 4
int b = 3;
b++; // b 값에 1을 더하라는 명령 1개 (전위형, 후위형 차이 없음)
System.out.println(b); // 4
- 다른 결과를 출력할 때
int a1 = 3;
int b1 = ++a1; // a1 값에 1을 더하기(전위형) -> a1 값은 b1에 대입하기
System.out.println(a1); // 4
System.out.println(b1); // 4
int a2 = 3;
int b2 = a2++; // a2 값을 b2에 대입하기 -> a2 값 1 더하기(후위형)
System.out.println(a2); // 4
System.out.println(b2); // 3
Q1. 다음은 산술 연산에 대한 코드이다. 출력값을 쓰시오.
System.out.println(2+3/2);
System.out.println(10%3+5/3);
System.out.println((4+5/2)%4;
3
2
2
Q2. 다음은 증감 연산에 대한 코드다. 출력값을 쓰시오
int a = 5;
int b = a++;
System.out.println(a); // 6
System.out.println(b); // 5
System.out.println(++a); // 7
System.out.println(++b); // 6
System.out.println(a++ + -- b); // (a: 7) + (b: 5) = 12
System.out.println(a+b); // (a: 8) + (b: 5) = 13
Q3. 다음은 비트 연산자에 관한 코드다. 출력값을 쓰시오(3=0b00000011, 5=0b00000101이며, 출력값은 2진수로 표현해도 됨)
System.out.println(5 & 3);
System.out.println(5|3);
System.out.println(5^3);
System.out.println(~5);
(5 & 3)
00000011
00000101
========
00000001 => 1
(5 | 3)
00000011
00000101
========
00000111 => 7
(5 ^ 3)
00000011
00000101
========
0000011 => 6
(~5)
00000011
========
111111100
Q4. 다음은 시프트 연산자에 관한 코드다. 출력값을 쓰시오.
System.out.println(7<<2);
System.out.println(7>>2);
System.out.println(-7<<2);
System.out.println(-7>>2);
System.out.println(-1>>>30);
>>> : 논리 시프트 (Unsigned Right Shift) 연산자
- 부호 비트를 고려하지 않고 빈 자리에는 항상 0을 채우며 오른쪽으로 이동
- >> (Arithmetic Right Shift)와 다르게 음수라도 0이 채워짐
Q5. 다음은 비교 연산자에 관한 코드다. 출력값을 쓰시오.
System.out.println(3<3);
System.out.println(5>=3);
System.out.println(5<=5);
System.out.println(5==5);
System.out.println(5!=5);
false
true
true
true
false
Q6. 다음은 논리 연산자에 관한 코드다. 출력값을 쓰시오.
System.ot.println(false && true);
System.out.println((4<=4)||(6<3));
System.out.println(false^(3>=4));
System.out.println(!(3<=3));
false
true || false => true
false
false
Q7. 다음은 논리 연산자와 비트 연산자로 논리 연산을 수행한 코드다. 출력값을 쓰시오.
int a =4, b =5, c=6;
System.out.println(false && a-- >6);
System.out.println(true | b++ >6);
System.out.println(true ^ c++ > 6);
System.out.println(a);
System.out.println(b);
System.out.println(c);
false
true
true
4
5
7
Q8. 다음은 대입 연산자에 관한 코드다. 출력값을 쓰시오.
int a = 3;
a<<=1;
System.out.println(a);
a &= 5;
System.out.println(a);
a-=1;
System.out.println(a*=2);
int a = 3:
첫번째 a : 6
두번째 a : 4
세번째 a : 3
출력: 3*2 = 6
Q9. 다음은 삼항 연산자에 관한 코드다. 출력값을 쓰시오.
int a = 3;
int b =5;
int c = 7;
System.out.println((a>b)?"안녕하세요" :"반갑습니다");
System.out.println((a<b)?(b>c)?"타입 A":"타입 B" : (b>c)?"타입 C" :"타입 D");
안녕하세요
타입 B
(a<b)? [{(b>c)? "타입 A ": "타입 B"} : {(b>c) ? "타입 C" : "타입 D "}]
3: true(B) 1: false (타입 B) 2: false (타입 D)