본문 바로가기
Kosta DevOps 과정 280기/Java

연산자

by 롯슈83 2024. 5. 12.

산술연산자

산술연산자 종류

  • +(더하기), -(빼기), *(곱하기), /(나누기), %(나머지)
class HelloJava{
	public static void main(String []args ){
		int a, b;
		a = 7;
		b = 3;

		System.out.println("a + b = "+(a+b));
		System.out.println("a - b = "+(a-b));
		System.out.println("a * b = "+(a*b));
		System.out.println("a / b = "+(a/b));
		System.out.println("a % b = "+(a%b));
	}
}

 

산술연산자 특징

  • int 끼리 나눗셈을 하면 int 형의 값이 나오므로 몫을 따로 구할 수 있다.

증감연산자

증감연산자의 정의와 특징

  • 해당 변수의 값을 1씩 증가하거나, 1씩 감소시키는 연산자로, 변수의 앞과 뒤에 붙을 수 있다
  • ++(1씩 증가), --(1씩 감소)
  • 대입연산자와 같이 쓸 경우, 연산 순서가 다르기 때문에 결과가 다르게 나올 수 있다.
    앞에 붙으면 먼저 1 증가 시킨 후 대입을 하지만, 뒤에 붙으면 대입한 후 1 증가시킨다.
    따라서 아래 코드와 같은 결과과 나온다.
class HelloJava{
	public static void main(String []args ){
		int a, b, a1, b1;
		a = 5;
		b = 5;
		
		a1 = a++;
		b1 = ++b;

		System.out.println("a = "+a);
		System.out.println("a1 = "+a1);
		System.out.println("b = "+b);
		System.out.println("b1 = "+b1);
	}
}

 

복합치환연산자

복합치환연산자란?

  • 변수 자신과 다른 값과 산술한 결과를 자신에게 다시 대입 하는 것이다.

복합치환연산자의 종류

  • +=, -=, *=, /=, %=
class HelloJava{
	public static void main(String []args ){
		int a, b;
		
		a = 7;
		b = 3;
		a += b; // a = a + b
		System.out.printf("a += b --> a = %d", a);
	}
}

  • a 의 값은 7, b 의 값은 3이므로 더한 뒤 a 변수에 값을 할당하여,  a는 10의 값을 갖게 되었다.

비교연산자

비교연산자의 정의

  • 값을 비교하는 연산자
  • boolean의 결과값이 나오며, if 의 조건이나 while 의 조건등에서 많이 사용된다. 

비교연산자의 종류

  • x > a: x는 a보다 크다
  • x < b: x는 a보다 작다
  • x >= a: x는 a보다 크거나 같다
  • x <= a: x는 a보다 작거나 같다
  • x == a: x와 a는 같다
  • x != a: x와 a는 같지 않다
class HelloJava{
	public static void main(String []args ){
		int a, b;
		a = 17;							
		b = 22;							

		System.out.println(a > b);
		System.out.println(a <= b);		
		System.out.println(a == 17);		
		System.out.println(b != 22);		
	}
}

 

논리연산자

논리연산자의 정의

  • 논리값을 비교하는 연산자로 두 개 이상의 boolean값을 비교한다.
  • boolean의 결과값이 나오며, 비교연산자와 함께 자주 사용된다.
  • 연산 순서는 비교연산자 후에 논리 연산자이다.

논리연산자의 종류

  • 논리곱
    • &&
    • and 연산(~ 이고)
    • 모두 true 일 때, true의 값이 나온다. (1개라도 false이면 결과값은 false 이다.)
  • 논리합
    • ||
    • or 연산(~이거나)
    • 1개 이상이 true 일 때, true 의 값이 나온다.(모두 false 이면 결과값은 false 이다.)

Short-circuit evalution(단락평가)

  • 첫 번째의 결과값이 결과를 내기에 충분할 때, 두 번째부터 평가하지 않는 것을 뜻한다. 
  • 반대말로 lazy evalution(지연평가) 가 있다.
  • (조건 1 && 조건 2) 가 주어졌을 때, 조건 1이 거짓이라면 조건 2를 판별하지 않고 결과값을 내는 것
  • (조건 1 || 조건 2)가 주어졌을 때, 조건 1이 참이라면 조건 2를 판별하지 않고 결과값을 내는 것
class HelloJava{
	public static void main(String []args ){
		int a, b;
		boolean x, y;
		a = 17;							
		b = 22;							
		
		x = a > 1 && b < 3;
		y = a > 1 || b < 1;

		System.out.println(x);
		System.out.println(y);
	}
}

비트연산자

비트연산자란

  • 비트끼리 연산하여 값을 내는 것을 뜻한다.

 

비트연산자의 종류

  • 비트곱
    • &
    • 두 개의 비트 상태가 모두 1일 때 결과가 1이 된다.
  • 비트합
    • |
    • 두 개의 비트 상태 중에 한 개 이상이 1일 때 결과가 1이 된다 
  • 비트차
    • ^
    • 두 개의 비트 상태 가 달라야 1이 된다(둘 다 0이거나 1이면 결과값은 0이다)
    • 해당 비트 차를 이용하여 새로운 변수를 선언하지 않아도 2개의 변수 값을 뒤바꾸는 것이 가능하다.
  • 쉬프트연산
    • x << n: 변수 x의 비트를 n만큼 왼쪽으로 이동한다
      비트는 이진수로 되어있으며 왼쪽으로 밀면 값이 커지므로 2n를 곱한것과 같은 결과가 나온다.
    • x >> n: 변수 x의 비트를 n만큼 오른쪽으로 이동한다
      비트는 이진수로 되어있으며 오른쪽으로 밀면 값이 작아지므로 2n를 나눈 것과 같은 결과가 나온다.

비트연산자의 진리표

X Y & | ^
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

 

 

기본적으로 비트연산 하는 순서

  1. 비트 연산을 할 때 십진수가 주어질 경우 이진수로 변경한다.
  2. 각 자릿수를 위의 진리표에 맞게 비교하여 결과를 낸다.
class HelloJava{
	public static void main(String []args ){
		int a, b;
		a = 17;							//10001(2)
		b = 22;							//10110(2)

		System.out.println(a & b);		//10000(2) = 16
		System.out.println(a | b);		//10111(2) = 23
		System.out.println(a ^ b);		//00111(2) = 7
		System.out.println(a << 2);		//1000100(2) = 68
		System.out.println(b >> 1);		//1011(2) = 11
	}
}

 

비트차 연산으로 Swap 하기

  • 보통의 Swap 은 변수를 하나 더 만들어서 넣고 하나씩 옮기는 것이 일반적이지만, 비트차를 이용할 경우  Swap 이 가능하다.
class HelloJava{
	public static void main(String []args ){
		int a, b;
		a = 17;
		b = 22;
		
		a = a ^ b; 
		b = a ^ b;
		a = a ^ b;
		
		System.out.println(a);
		System.out.println(b);
	}
}

 

  • 비트차 연산으로 Swap 하는 것의 원리
    • 할당해서 값이 변했을 때를 임의적으로 an등으로  지칭했을 때, 다음과 같다.
    • a = a ^ b
      > a1 값이 a ^ b를 담는다.
    • b = a ^ b
      > b = a1 ^ b = (a ^ b) ^ b
      > XOR 연산 법칙에 의하여 b1 = a 가 된다.
    • a = a ^ b
      > a = a1 ^ b1
      > a = (a ^ b) ^ a
      > XOR 연산 법칙에 의하여 a = b가 된다.

 

비트연산자를 논리 연산자처럼 사용하기

  • 비트연산자는 논리 연산자처럼 사용이 가능하다.
  • 단, 논리 연산자처럼 Short-Circult evalution(단락평가)를 사용하지 않으므로 증감연산자처럼 복합적으로 사용하는 경우는 변수값이 달라질 수 있으므로 유의해야한다.
class HelloJava{
	public static void main(String []args ){
		int a, b, a1, b1;
		a = 17;	
		b = 22;	
		a1 = 17;
		b1 = 22;

		System.out.println(a == 17 & b == 22);
		
		System.out.println(a++ != 17 && b++ != 32);
		System.out.println(a1++ != 17 & b1++ != 32);
		
		System.out.printf("a = %d, b = %d, a1 = %d, b1 = %d", a, b, a1, b1);
	}
}

 

삼항연산자(조건연산자)

삼항연산자란?

  • 3개의 항을 이용하여 연산하는 연산자로, if문 대신 간결하게 쓰고 싶을 때 많이 사용한다.
  • (항)? 항2 : 항3 --> (조건식)? (조건이 true 일 때 실행문):(조건이 false 일 때 실행문)
  • 결과값은 조건에 따라 항2 또는 항3이 된다.
class HelloJava{
	public static void main(String []args ){
		int a;
		a = 17;	
		
		System.out.println(a == 5? "a is 5": "a is not 5");
	}
}

 

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

제어문(2) - 조건문  (0) 2024.05.13
제어문(1) - 정의와 종류  (0) 2024.05.13
자료형  (0) 2024.05.11
기본 입출력  (0) 2024.05.10
자바의 기본 구성과 API  (0) 2024.05.10