No. 01

 

 

논리 연산자  &&  ||  !


논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다.

논리 연산자 '&&'은 '그리고(AND)'에 해당하며, '||'은 '또는(OR)'에 해당한다.




논리 연산자의 연산 결과1

x

y

x || y

x && y

 true

true

true

true

 true

false

true

false

false

true

true

false

false

false

false

false


논리 연산자의 연산 결과2

x

!x

true

false

false

true



예제1 (AND, OR 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.Scanner;
 
public class Operator {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        //1] 10 < x < 20에 있는지 판단
        System.out.println("1] 10과 20사이에 있는지 판단할 숫자 x를 입력하세요.");
        String strX = scanner.nextLine();
        int x = Integer.parseInt(strX);
        System.out.printf("x=%d, x > 10 && x < 20 인가?  %b%n",x, x>10 && x<20);
        System.out.println();
        
        //2] i가 2의 배수 또는 3의 배수인지 판단
        System.out.println("2] 2의 배수 또는 3의 배수인지 판단할 숫자 i를 입력하세요.");
        String strI = scanner.nextLine();
        int i = Integer.parseInt(strI);
        System.out.printf("i=%d, i%%2==0 || i%%3==0 인가?  %b%n",i, i%2==0 || i%3==0);
        System.out.println();
        
        //3] c가 알파벳인지 아닌지 판단
        System.out.println("3] 알파벳인지 판단할 문자 c를 입력하세요.");
        String strC = scanner.nextLine();
        char c = strC.charAt(0); //String -> char로 변환하는 메소드
        System.out.printf("c=%c, 입력한 문자는 알파벳인가?  %b%n",c, ('a'<=c && c<='z') || ('A'<=c && c<='Z'));
        
    }//main
 
}//class
                                                                                                          Colored By Color Scripter


실행 결과

1] 10과 20사이에 있는지 판단할 숫자 x를 입력하세요.

23

x=23, x > 10 && x < 20 인가?  false


2] 2의 배수 또는 3의 배수인지 판단할 숫자 i를 입력하세요.

41

i=41, i%2==0 || i%3==0 인가?  false


3] 알파벳인지 판단할 문자 c를 입력하세요.

B

c=B, 문자 c는 알파벳인가?  true


1]의 경우 일상생활에서 표현하는 것은 10 < x < 20 과 같이 표현할 수 있지만 자바에서는 이런 문법이 없고 하나씩 비교한다음 AND 연산자로 묶어 주어야 한다. x가 10보다 큰것도 만족하고 x가 20보다 작은것도 만족했을 때만 true가 나오는 것을 볼 수 있다.

2]의 경우 OR연산자를 사용한 경우로 2의 배수일때나 3의 배수 둘중 하나만 만족하여도 true가 나온다. 입력한 41은 둘다 만족하지 않았기 때문에 false값이 나왔다.

3]의 경우처럼 여러개의 연산도 논리연산자로 이어서 사용할 수 있다.



◈ 예제2(부정 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Operator {
 
    public static void main(String[] args) {
        
        boolean b = true;
        int i = 15;
        
        System.out.printf("b=%b, !b의 결과 : %b%n",b,!b);
        System.out.printf("i=%d, !(i>10 && i<20)의 결과 : %b%n",i, !(i>10 && i<20)); 
        
    }//main
 
}//class
                                                                       Colored By Color Scripter


실행 결과

b=true, !b의 결과 : false

i=15, !(i>10 && i<20)의 결과 : false


부정 연산자를 사용하면 피연산자의 논리값에 반대되는 결과를 반환한다.

피 연산자가 true이면 false를, false이면 true를 반환한다.




No. 02

 

 

비트 연산자  &  |  ^  ~


비트 연산자는 피연산자의 각 비트들을 대상으로 연산이 이루어지며 총 4개의 연산자가 있다.




비트 연산자의 연산 결과1

x

y

x | y

x & y

x ^ y

1

1

1

1

0

1

0

1

0

1

0

1

1

0

1

0

0

0

0

0


비트 연산자의 연산 결과2

x

~x

1

0

0

1



◈ 예제(비트 연산자)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 10; //2진수로 변환시 1010
        int y = 12; //2진수로 변환시 1100
        
        System.out.println("x = \t"+toBinaryString(x));
        System.out.println("y = \t"+toBinaryString(y));
        System.out.println("x|y = \t"+toBinaryString(x|y));
        System.out.println("x&y = \t"+toBinaryString(x&y));
        System.out.println("x^y = \t"+toBinaryString(x^y));
        System.out.println("~x = \t"+toBinaryString(~x));
                        
    }//main
    
    //10진 정수를 2진수로 변환하는 메서드
    static String toBinaryString(int number) {
        String zero = "00000000000000000000000000000000";
        String binary = zero + Integer.toBinaryString(number);
        return binary.substring(binary.length()-32);    
    }
 
}//class
                                                Colored By Color Scripter


실행 결과


toBainaryString() 메서드는 신경쓸 필요 없다 단지 비트연산자가 컴퓨터 내부에서 어떻게 처리되는지 문자열로 표현해주기 위해 사용했다.

비트 연산자를 사용한 결과가 어떻게 나오는지 볼 수 있다. 

· 비트AND연산자'&'은 피연산자 양 쪽이 모두 1이일 때만 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트OR연산자'|'은 피연산자 중 한쪽이 1이면 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트XOT연산자 '^'은 피연산자의 값이 서로 다를 때만 1을 결과로 얻고, 그 외에는 0을 얻는다.

· 비트 전환 연산자는 0은 1로, 1은 0으로 바꾼다.




No. 03

 

 

쉬프트 연산자  <<  >>


쉬프트 연산자는 피연산자의 각 비트들을 '오른쪽(>>)' 또는 '왼쪽(<<)'으로 이동시킨다.





◈ 예제(쉬프트 연산자)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Operator {
 
    public static void main(String[] args) {
        
        int x = 10; //2진수로 변환시 1010
        int y = 12; //2진수로 변환시 1100
        
        System.out.println("x = \t\t"+toBinaryString(x));        
        System.out.println("x >> 1 = \t"+toBinaryString(x >> 1));// 오른쪽으로 1칸 이동
        System.out.println("x >> 2 = \t"+toBinaryString(x >> 2));// 오른쪽으로 2칸 이동
        System.out.println("y = \t\t"+toBinaryString(y));
        System.out.println("y << 1 = \t"+toBinaryString(y << 1));// 왼쪽으로 1칸 이동
        System.out.println("y << 2 = \t"+toBinaryString(y << 2));// 왼쪽으로 2칸 이동
                        
    }//main
    
    //10진 정수를 2진수로 변환하는 메서드
    static String toBinaryString(int number) {
        String zero = "00000000000000000000000000000000";
        String binary = zero + Integer.toBinaryString(number);
        return binary.substring(binary.length()-32);    
    }
 
}//class
                                                                          Colored By Color Scripter


실행 결과


지정한 숫자만큼 자리를 이동하는 것을 볼 수 있다.


· 왼쪽 쉬프트(<<n)는 을 곱한 결과와 같다.

· 오른쪽 쉬프트(>>n)는 으로 나눈 결과와 같다.




'JAVA' 카테고리의 다른 글

[Java 17] 조건문 - if, switch  (0) 2017.11.27
[Java 16] 증감 연산자, 조건 연산자  (0) 2017.11.26
[Java 14] 비교 연산자  (0) 2017.11.23
[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21

+ Recent posts