자바 도전기 -9

김치전사·2021년 12월 30일
0

자바도전기

목록 보기
9/17

논리 연산자와 비트 연산자를 공부한다

논리 연산자는 둘 이상의 조건을 '그리고(AND)'나 '또는(OR)'으로 연결하여 하나의 식으로 표현할 수 있게 해준다.

논리 연산자 - &&, ||, !

논리 연산자 '&&'는 우리말로 '그리고(AND)'에 해당하며, 두 피연산자가 모두 true일 때만 true로 결과를 얻는다.
'||'는 '또는(OR)'에 해당하며, 두 피연산자 중 오느 한 쪽만 true이어도 true를 결과로 얻는다.
논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다

||(OR결합) 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다
&&(AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다
public class OperatorEx24 {
    public static void main(String[] args){
        int x =0;
        char ch = ' ';

        x= 15;
        System.out.printf("x=%2d, 10 < x && x< 20 =%b%n",x,10<x&&x<20);//true

        x=6;
        System.out.printf("x=%2d, x%%2==0 || x%%3==0 && x%%6!=0 =%b%n",x,x%2==0||x%3==0&&x%6!=0);//true
        System.out.printf("x=%2d, x%%2==0 || x%%3==0 && x%%6!=0 =%b%n",x,(x%2==0||x%3==0)&&x%6!=0);//false

        ch='1';
        System.out.printf("ch='%c', '0' <= ch && ch <= '9' =%b%n",ch,'0'<=ch&&ch<='9');//true

        ch='a';
        System.out.printf("ch='%c', 'a' <= ch && ch <= 'z' =%b%n",ch,'a'<=ch&&ch<='z');//true

        ch='A';
        System.out.printf("ch='%c', 'A' <= ch && ch <= 'Z' =%b%n",ch,'A'<=ch&&ch<='Z');//true

        ch='q';
        System.out.printf("ch='%c', ch=='q' || ch=='Q' =%b%n",ch,ch=='q'||ch=='Q');//true
    }
}
import java.util.*;

public class OperatorEx25 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        char ch = ' ';

        System.out.printf("문자를 하나 입력하세요.>");

        String input=scanner.nextLine();
        ch=input.charAt(0);

        if('0'<=ch && ch <= '9'){
            System.out.printf("입력하신 문자는 숫자입니다. %n");
        }
        if(('a'<=ch && ch<='z')||('A'<=ch&&ch<='Z')){
            System.out.printf("입력하신 문자는 영문자입니다.%n");
        }
    }
}

이 예제는 사용자로부터 하나의 문자를 입력받아서 숫자인지 영문자인지 확인한다.

효율적인 연산(short circuit evaluation)

xyx || y
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

좌측 피연산자가 'true'이면, 우측 피연산자의 값은 평가하지 않는다.

xyx && y
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

논리 부정 연산자 !

이 연산자는 피연산자가 true이면 false를, false면 true를 결과로 반환한다.
간단히 말해서, true와 false를 반대로 바꾸는 것이다.

x! x
truefalse
falsetrue

비트 연산자 & | ^ ~ << >>

비트 연산자는 피연산자를 비트단위로 논리 연산한다.

|(OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
&(AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다 같을 때는 0을 얻는다.
xyx | yx & yx ^ y
11110
10101
01101
00000

비트 전환 연산자 ~

이 연산자는 피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꾼다. 논리부정 연산자'!'와 유사하다.

x~x
10
01

쉬프트 연산자 << >>

x << n은 x*2^n의 결과와 같다
x >> n은 x/2^n의 결과와 같다

그 외의 연산자

조건 연산자 ?:

조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다

조건식 ? 식1 : 식2

조건식의 평가결과가 true이면 식1이, false이면 식2가 연산결과가 된다

대입 연산자 = op=

대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다
대입 연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있다.
예를 들어, i=i+3을 i+=3으로 같이 표현할 수 있다.

op==
i += 3;i = i + 3;
i -= 3;i = i - 3;
i *= 3;i = i * 3;
i /= 3;i = i / 3;
i +%= 3;i = i % 3;
i <<= 3;i = i << 3;
i >>= 3;i = i >> 3;
i &= 3;i = i & 3;
i ^= 3;i = i ^ 3;
i |= 3;i = i | 3;

표의 왼쪽은 복합 연산자의 사용 예이고, 오른쪽은 대입 연산자를 이용한 왼쪽과 동일한 의미의 식이다.

profile
개인공부 블로그입니다. 상업적 용도 X

0개의 댓글