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)