6. 관계 연산자

 관계 연산자는 일상의 수학에서 부등호 역할을 한다고 볼 수 있습니다. 왼쪽과 오른쪽의 대소를 구분하여 참과 거짓을 반환하는 형태입니다. 결과값은 true 혹은 false로 나타내기 때문에 논리형에서 사용할 수 있습니다. 관계 연산자는 비교 관계 연산자와 항등 관계 연산자로 구분할 수 있습니다.

 

 1] 비교 관계 연산자 ( <, >, <=, >= )

  비교 관계 연산자는 초과, 이상, 미만, 이하를 나타내는데 사용합니다.

 

  - int a = 10;

    int b = 11;

    boolean bool = a < b;   // bool의 값은 true

 

 2] 항등 관계 연산자 ( ==, != )

  항등 관계 연산자는 왼쪽과 오른쪽의 두 값이 같은지 아닌지를 판단할 때 사용합니다. '=='은 두 값이 같다는 의미이고 '!='은 두 값이 다르다는 의미입니다. 각 연산자의 결과값은 참이면 true를, 거짓이면 false를 반환합니다.

 

  - int a = 10;

    int b = 11;

    boolean bool = a == b;   // bool의 값은 false

 

7. 비트 연산자

 비트 연산자는 앞서 설명했던 쉬프트 연산자와는 약간의 차이점이 있습니다. 쉬프트 연산자의 경우에는 비트로 변환 후 일정 값 만큼 이동시키지만 비트 연산자는 비트로 변환 후 서로 일치하는 비트의 수를 계산하는 연산자입니다. 

 

 1] AND 연산자 ( & )

  이 AND 연산자는 두 피연산자의 비트 값이 모두 1일 때 결과값을 1로 반환하고 나머지는 0으로 반환합니다.

 

  - int a = 3;

    int b = 5;

    int c = a & b;

 

    0000 0000 0000 0000 0000 0000 0000 0011     // 10진수 3

    0000 0000 0000 0000 0000 0000 0000 0101     // 10진수 5

    -------------------------------------------------- AND 연산

    0000 0000 0000 0000 0000 0000 0000 0001     // 10진수 1

 

 2] Exclusive OR 연산자 ( ^ )

  이 연산자는 & 연산자와 반대로 두 피연산자의 비트 값이 서로 다를 때 1을 반환하고 같으면 0을 반환합니다.

 

  - int a = 3;

    int b = 5;

    int c = a & b;

 

    0000 0000 0000 0000 0000 0000 0000 0011     // 10진수 3

    0000 0000 0000 0000 0000 0000 0000 0101     // 10진수 5

    -------------------------------------------------- ^ 연산

    0000 0000 0000 0000 0000 0000 0000 0110     // 10진수로 6

 

 3] OR 연산자 ( | )   ※ 보통 엔터 키 위의 역슬래쉬를 Shift 키와 같이 누르면 나오는 기호

  이 연산자는 두 피연산자의 비트 값이 모두 0이면 0을 반환하고 하나라도 1이면 1을 반환합니다.

 

  - int a = 3;

    int b = 5;

    int c = a & b;

 

    0000 0000 0000 0000 0000 0000 0000 0011     // 10진수 3

    0000 0000 0000 0000 0000 0000 0000 0101     // 10진수 5

    -------------------------------------------------- ^ 연산

    0000 0000 0000 0000 0000 0000 0000 0111     // 10진수로 7

 

8. 논리 연산자

 논리 연산자는 앞에서 나왔던 것도 몇가지 있습니다. 서로 비슷하게 생긴 모양들도 있지만 각자의 역할이 다르므로 주의가 필요합니다.

 

 1] &와 &&연산자

  위 연산자들은 두 피연산자 모두 true값을 가지면 결과가 true가 됩니다. 하지만 실행에 있어서는 약간의 차이가 있습니다. &&는 &와 그 역할은 비슷하지만 두 피연산자의 값을 모두 비교하지 않는다는 다른 점이 있습니다. 아래의 예시를 보도록 하겠습니다.

 

  - int a = 10;

    int b = 20;

    boolean bool = ++x > y && x < ++y; 

 

 위의 코드를 실행해보면 bool에는 false 값이 들어가는 것을 확인할 수 있습니다. 하지만 y의 값은 그대로 20인 것을 알 수 있습니다. 이는 && 연산이후 x < ++y 부분에서 y에 증감 연산자가 작동하지 않았다는 뜻이 됩니다. 이를 통해 알 수 있는 것은 && 연산자는 두 피연산자를 모두 비교하는 것이 아닌 앞에서 false라고 판단이 되면 뒤의 연산은 자동으로 수행하지 않는다는 것을 알 수 있습니다.

 

 2] |와 ||연산자

  위 연산자들은 아까와는 반대로 두 피연산자 모두 false의 값을 가지면 false값을 출력하게 됩니다. ||연산자 또한 |와 같은 역할을 하지만 앞쪽 피연산자의 연산만으로 전체 결과의 판단이 가능하다고 판단되면 뒤의 연산은 수행하지 않습니다. 아래의 코드를 보도록 하겠습니다. 

 

 우선 |연산자부터 살펴보도록 하겠습니다.

public class Round05_Ex05 {
	
	public static boolean aaa() {
		System.out.println("AAA");
		return true;
	}
	
	public static boolean bbb() {
		System.out.println("BBB");
		return false;
	}

	public static void main(String[] args) {
		
		boolean b = aaa()|bbb();
		System.out.println("b = "+b);

	}

}

 위의 코드를 실행하면 aaa함수와 bbb함수가 모두 실행되어 'AAA', 'BBB' 모두 출력되고 이후에 true라는 값이 출력되는 것을 알 수 있습니다. 이번에는 반대로 아래의 코드를 살펴보도록 하겠습니다.

public class Round05_Ex04 {
	
	public static boolean aaa() {
		System.out.println("AAA");
		return true;
	}
	
	public static boolean bbb() {
		System.out.println("BBB");
		return false;
	}

	public static void main(String[] args) {
		
		boolean b = aaa()||bbb();
		System.out.println("b = "+b);

	}

}

 위의 코드는 아까와는 반대로 'AAA'만 출력되고 true라는 값이 출력되는 것을 확인할 수 있습니다.

 

9. 삼항 연산자

 삼항 연산자는 3개의 항으로 이루어져 있기 때문에 붙여진 이름입니다. 구조는 아래와 같습니다.

 

  - 조건항 ? 항1 : 항2

 

 삼항 연산자는 조건항에서 연산을 수행 후 참이라면 항1의 연산을, 거짓이라면 항2의 연산을 수행하게 됩니다. 아래의 예시를 보도록 하겠습니다.

 

  - int a = 10;

    int b = 20;

    int c = a < b ? a : b;

 

 위의 코드의 결과는 a가 b보다 작기 때문에 c 변수에는 a의 값이 들어가게 됩니다. 하지만 C언어와 비슷하기 때문에 쉽게 발생하는 오류가 있습니다. 만약 아래와 같이 코딩을 하게 된다면 오류가 발생할 것입니다.

 

  - int a = 10;

    a == 10? System.out.println("참") : System.out.println("거짓");

 

 자바에서는 이러한 문법을 허용하지 않기 때문에 아래와 같이 고쳐주어야 합니다.

 

  - int a = 10;

    System.out.println(a == 10 ? "참" : "거짓");

 

 이처럼 동일한 문장을 반복하는 것이 아닌 하나의 문장 안에 전달할 매게변수에서 연산을 수행하여야 합니다.

 

10. 배정 대입 연산자

  배정 대입 연산자는 대입 연산자와 다른 연산자들을 결합한 형태라고 볼 수 있습니다. 때문에 두 가지 연산자의 역할을 모두 수행합니다. 아래의 예시를 보도록 하겠습니다.

 

  - int a = 10;

    int b = 0;

    int b = a -= ++b;

 

 위의 코드는 변수 b에 a에서 b에 1을 더한 값을 빼고 저장하라는 의미가 됩니다. 이를 자세하게 풀어쓰면 아래와 같이 나타낼 수 있습니다.

 

  - int b = ( a = a - (++b));   // 연산 결과는 a=9, b=9

'프로그래밍 > JAVA' 카테고리의 다른 글

제어문 - 1 ( if, switch-case-break )  (0) 2019.04.17
자바 연산자 - 문제  (0) 2019.04.16
자바 연산자 - 1  (0) 2019.04.14
자바 기본 입출력 - 문제  (0) 2019.04.11
자바 기본 입출력  (0) 2019.04.10

+ Recent posts