이론 정리

연산자

  • 연산에 사용되는 표시나 기호
  • 피연산자 : 연산되는 데이터
  • 단항, 이항, 삼항 연산자 순서의 우선순위
  • 산술, 비교, 논리, 대입 연산자 순서의 우선순위
  • ++a 속도가 a=a+1 속도보다 빠르다.

String 타입

  • 참조형 타입

비트 연산자

  • 데이터를 bit 단위로 연산
  • 정수 타입만 가능
  • 비트 논리 연산자, 비트 이동 연산자

삼항 연산자

  • 세개의 피연산자를 필요로 하는 연산자
// 조건식 ? 값 또는 연산식(true) : 값 또는 연산식(false)
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C');

연습문제

[3-1] 다음 연산의 결과를 적으시오.

class Exercise3_1 {
    public static void main(String[] args){
        int x = 2;
        int y = 5;
        char c = 'A'; // 'A'의 문자 코드는 65
        
        System.out.println(1 + x << 33);
        System.out.println(y >= 5 || x < 0 && x > 2);
        System.out.println(y += 10 - x++);
        System.out.println(x+=2);
        System.out.println(!('A' <= c && c <= 'Z'));
        System.out.println('C'-c);
        System.out.println('5'-'0');
        System.out.println(c+1);
        System.out.println(++c);
        System.out.println(c++);
        System.out.println(c);
    }
}
  • 풀이
  • 1. 1+2 (3를 33만큼 왼쪽으로 이동 -> (32+1bit)1번만 이동 0011 -> 0110 = 6 2. true || false && false = false 논리연산자 &&가 ||보다 우선순위가 더 높다 true || true = true 3. 15-2++ = 13 4. (2++) + 2 = 5 5. !(true && true) = false 6. 67-65 = 2 7. 5 8. 66 9. B 10. B 11. C

[3-2] 아래의 코드는 사과를 담는데 필요한 바구니(버켓)의 수를 구하는 코드이다. 만일 사과의 수가 123개이고 하나의 바구니에는 10개의 사과를 담을 수 있다면, 13개의 바구니가 필요할 것이다. (1)에 알맞은 코드를 넣으시오.

class Exercise3_2 {
    public static void main(String[] args){
        int numOfApples = 123; // 사과의 개수
        int sizeOfBucket = 10; 
// 바구니의 크기(바구니에 담을 수 있는 사과의 개수)
        int numOfBucket = ( /*(1)*/ ); 
// 모든 사과를 담는데 필요한 바구니의 수
        
        System.out.println("필요한 바구니의 수 :"+numOfBucket);
    }
}
[실행결과]
13
  • 풀이
  • // numOfApples/sizeOfBucket+1; 반례 : 나머지가 0 인경우 ((numOfApples/sizeOfBucket)==0) ? numOfApples/sizeOfBucket : numOfApples/sizeOfBucket+1

[3-3] 아래는 변수 num의 값에 따라 ‘양수’, ‘음수’, ‘0’을 출력하는 코드이다. 삼항 연산자를 이용해서 (1)에 알맞은 코드를 넣으시오. (삼항 연산자 2번 사용)

class Exercise3_3 {
    public static void main(String[] args){
        int num = 10;
        System.out.println( /* (1) */ );
    }
}
[실행결과]
양수
  • 풀이
  • (num>0) ? "양수" : ((num<0) ? "음수" : '0')

[3-4] 아래는 변수 num의 값 중에서 백의 자리 이하를 버리는 코드이다. 만일 변수 num의 값이 ‘456’이라면 ‘400’이 되고, ‘111’이라면 ‘100’이 된다. (1)에 알맞은 코드를 넣으시오.

class Exercise3_4 {
    public static void main(String[] args){
        int num = 456;
        System.out.println( /* (1) */ );
    }
}
[실행결과]
400
  • 풀이
  • (num/100)*100

[3-5] 아래는 변수 num의 값 중에서 일의 자리 1로 바꾸는 코드이다. 만일 변수 num의 값이 ‘333’이라면 ‘331’이 되고, ‘777’이라면 ‘771’이 된다. (1)에 알맞은 코드를 넣으시오.

class Exercise3_5 {
    public static void main(String[] args){
        int num = 333;
        System.out.println( /* (1) */ );
    }
}
[실행결과]
331
  • 풀이
  • ((num/10)*10)+1

[3-6] 아래는 변수 num의 값보다 크면서도 가장 가까운 10의 배수에서 변수 num의 값을 뺀 나머지를 구하는 코드이다. 예를 들어, 24의 크면서도 가장 가까운 10의 배수는 30이다. 19의 경우 20이고, 81의 경우 90이 된다. 30에서 24를 뺀 나머지는 6이기 때문에 변수 num의 값이 24라면 6을 결과로 얻어야 한다. (1)에 알맞은 코드를 넣으시오.

class Exercise3_6 {
    public static void main(String[] args){
        int num = 24;
        System.out.println( /* (1) */ );
    }
}
[실행결과]
6
  • 풀이
  • (((num/10)+1)*10) - num

[3-7] 아래는 화씨(Fahrenheit)를 섭씨(Celsius)로 변환하는 코드이다. 변환공식이 ‘C’ = 5/9 x (F - 32)’ 라고 할 때, (1)에 알맞은 코드를 넣으시오. 단, 변환 결과값은 소수점 셋째자리에서 반올림해야한다. (Math.round()를 사용하지 않고 처리할 것)

class Exercise3_7 {
    public static void main(String[] args){
        int fahrenheit = 100;
        float celcius = ( /* (1) */ );

        System.out.println("Fahrenheit:"+fahrenheit);
        System.out.println("Celcius:"+celcius);
    }
}
[실행결과]
Fahrenheit:100
Celcius:37.78
  • 풀이
  • (int)((5/9f * (fahrenheit - 32))*100 + 0.5) / 100f; // 1. 37.77778 * 100 // 2. (1)+0.5 // 3. (int)(2) // 4. (3)/100f

[3-8] 아래 코드의 문제점을 수정해서 실행결과와 같은 결과를 얻도록 하시오.

class Exercise3_8 {
    public static void main(String[] args){
        byte a = 10;
        byte b = 20;
        byte c = a + b;

        char ch = 'A';
        ch = ch + 2;

        float f = 3/2;
        long l = 3000 * 3000 * 3000;

        float f2 = 0.1f;
        double d = 0.1;

        boolean result = d==f2;

        System.out.println("c="+c);
        System.out.println("ch="+ch);
        System.out.println("f="+f);
        System.out.println("l="+l);
        System.out.println("result="+result);
    }
}
[실행결과]
c=30
ch=C
f=1.5
l=27000000000
result=true
  • 풀이
  • byte c = (byte)(a + b); ch = (char)(ch + 2); float f = 3/2f; long l = 3000 * 3000 * 3000L; boolean result = (float)d==f2;

[3-9] 다음은 문자형 변수 ch가 영문자(대문자 또는 소문자)이거나 숫자일 때만 변수 b의 값이 true가 되도록 하는 코드이다. (1)에 알맞은 코드를 넣으시오.

class Exercise3_9 {
    public static void main(String[] args){
        char ch = 'z';
        boolean b = ( /* (1) */ );
        System.out.println(b);
    }
}
[실행결과]
true
  • 풀이
  • (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')

[3-10] 다음은 대문자를 소문자로 변경하는 코드인데, 문자 ch에 저장된 문자가 대문자인 경우에만 소문자로 변경한다. 문자코드는 소문자가 대문자보다 32만큼 더 크다. 예를들어 ‘A’의 코드는 65이고, ‘a’의 코드는 97이다. (1)~(2)에 알맞은 코드를 넣으시오.

class Exercise3_10 {
    public static void main(String[] args){
        char ch = 'A';
        char lowerCase = ( /* (1) */ ) ? ( /* (2) */ ) : ch;

        System.out.println("ch:"+ch);
        System.out.println("ch to lowerCase:"+lowerCase);
    }
}
[실행결과]
ch:A
ch to lowerCase:a
  • 풀이
  • (ch >= 65 && ch < 97) ? (char)(ch+32)

+ Recent posts