본문 바로가기
Framwork/Java기초

Chapter 3. 계산을 위한 연산자

by 김엉배 2022. 10. 4.
728x90
반응형

1. 수치 연산자

 - 수치 연산자는 이항 연산자와 단항 연산자로 나뉜다.

    * 이항 연산자: 연산을 가운데 두고 양 옆에 숫자를 넣어야 하는 연산자

    * 단항 연산자: 연산자와 변수 하나만으로 구성된 형태의 연산자

 

   1) 이항 연산자

public class Code_22 {
	public static void main(String[] args)
	{
		int a = 30, b = 7;
		int c, d, e, f, g;
		c = a + b;
		d = a - b;
		e = a * b;
		f = a % b;
		g = a / b;
		System.out.println("c : " + c);
		System.out.println("d : " + d);
		System.out.println("e : " + e);
		System.out.println("f : " + f);
		System.out.println("g : " + g);
	}
}
//결과값 

c : 37
d : 23
e : 210
f : 2
g : 4
  • 기본 이항 연산자는  (+ 덧셈, - 뺄셈, *  곱셈, % 나머지, / 몫)으로 모두 5가지가 있다. 
public class Code_23 {
	public static void main(String[] args)
	{
		int n = 2753;
		int a, b, c, d;
		a = n / 1000;
		n = n % 1000;
		b = n / 100;
		n = n % 100;
		c = n / 10;
		d = n % 10;
		System.out.println("1000의 자리 : " + a);
		System.out.println("100의 자리 : " + b);
		System.out.println("10의 자리 : " + c);
		System.out.println("1의 자리 : " + d);
	}
}
//결과값
1000의 자리 : 2
100의 자리 : 7
10의 자리 : 5
1의 자리 : 3
  • 연산를 이용해서 정수의 자릿수대로 떼어서 출력하는 코드를 만들 수 있다.
public class Code_24 {
	public static void main(String[] args)
	{
		int n = 20000;
		int day = n / (24 * 60 * 60);
		int hour = (n/(60 * 60)) % 24;
		int min = (n/60) % 60;
		int sec = n % 60;
		System.out.println(day +"일 "+ hour+"시간 "+ min+ "분" + sec + "초");
	}
}
//결과값
0일 5시간 33분20초
  • n에는 초가 저장되어 있어, n을 시, 분, 초로 바꾸어 출력하는 코드 
public class Code_25 {
	public static void main(String[] args)
	{
		double f = 72.5;
		double c = (f-32.0)/1.8;
		System.out.println("화씨 " + f + "도는 섭씨 " + c + "도와 같습니다.");
	}
}
//결과값 
화씨 72.5도는 섭씨 22.5도와 같습니다.
  • F값에는 화씨 온도가 저장되어 있다.
public class Code_26 {
	public static void main(String[] args)
	{
		int a = 7;
		byte b;
		short c; 
		
		b = a; //에러
		c = a; //에러
	}
}
  • 자바의 정수 자료형 간에는 대소가 관계가 있다.
    byte < short < int < long  
    기본적으로 큰 데이터를 자기보다 작은 데이터 공간에 저장할 수 없다.

    2) 단항 연산자

public class Code_27 {
	public static void main(String[] args)
	{
		int a = 10, b;
		b = a++;
		System.out.println("a : " + a);
		System.out.println("b : " + b);
	}
}
//결과값 
a : 11
b : 10
public class Code_28 {
	public static void main(String[] args)
	{
		int a = 10, b;
		b = ++a;
		System.out.println("a : " + a);
		System.out.println("b : " + b);
	}
}
//결과값
a : 11
b : 11
  • ++ 기호가 후치형인 경우 먼저 해당 줄을 수행하고 다음 줄로 넘어가기 전에 변수의 값을 1 증가시킨다.
    ++ 기호가 전치인 경우 먼저 변수의 값을 1 증가시킨 후에 그 줄을 수행한다. 
  • 코드 27번이 후치 표현이고, 코드 28번이 전치 표현이다. 결괏값을 통해 다른 값이 나온다는 걸 알 수 있다.
public class Code_29 {
	public static void main(String[] args)
	{
		int a = 10, b = 20, c = 5, d;
		d = a++ + --b + ++c;
		System.out.println("a : " + a);
		System.out.println("b : " + b);
		System.out.println("c : " + c);
		System.out.println("d : " + d);
	}

}
//결과값
a : 11
b : 19
c : 6
d : 35
  • d = a++ + --b + ++c;는 현재 a값 그대로 , b는 1 감소, c는 1 증가시켜서 계산을 진행하면 된다.

2. 비트 연산자

   1) AND - &

public class Code_30 {
	public static void main(String[] args)
	{
		int x = 11;
		int y = 13;
		int z = x & y;
		System.out.println(z);
	}
}
//결과값
9
  • 두 정수에 & 연산을 취하면,  둘 다 1인 경우에만 1이 되고, 나머지 경우는 0이 되는 결과가 나온다.

 2) OR - |

public class Code_31 {
	public static void main(String[] args) {
		int x = 11;
		int y = 13;
		int z = x | y;
		System.out.println(z);
	}
}
//결과값
15
  • 두 정수에 | 연산을 취하면 둘 다 0인 경우에만 0이 되고 나머지는 모두 1이 된다.

 3) XOR - ^

public class Code_32 {
	public static void main(String[] args)
	{
		int x = 11;
		int y = 13;
		int z = x ^ y;
		System.out.println(z);
	}
}
//결과값
6
  • 피연산자 중에서 한 개는 0이고, 다른 한 개는 1인 경우에 XOR결과는 1이 된다.

 

3. 시프트 연산자

    - >> , >>> , << 이렇게 3가지가 있다.

public class Code_33 {
	public static void main(String[] args)
	{
		int x = 20;
		int a = 2;
		int r1 = x >> a;
		int r2 = x >>> a;
		int r3 = x << a;
		System.out.println("r1 : " + r1);
		System.out.println("r2 : " + r2);
		System.out.println("r3 : " + r3);
	}
}
//결과값
r1 : 5
r2 : 5
r3 : 80
  • 시프트 연산자보다 +또는 *연산의 사용이 쉬우나 연산 속도가 빠르다는 장점 때문에 많이 사용된다.

4. 관계 연산자

public class Code_34 {
	public static void main(String[] args)
	{
		int a = 50, b = 30, c = 60;
		boolean b1 = a > b;
		boolean b2 = b > c;
		boolean b3 = a >= c;
		boolean b4 = b <= c;
		boolean b5 = a == b;
		boolean b6 = a != b;
		System.out.println(b1 + " " + b2 + " " + b3);
		System.out.println(b4 + " " + b5 + " " + b6);
	}
}
//결과값
true false false
true false true

5. 논리 연산자

    -  A && B : A와 B가 모두 참인 경우에만 참이 된다.

    -  A || B : A와 B 중에 한 개 이상이 참이면 A || B는 참이 된다.

    -  !A :! 는 A가 참이면 거짓으로, A가 거짓이면 참으로 바꾸어 준다.

public class Code_35 {
	public static void main(String[] args)
	{
		int a = 10, b = 20, c = 30, d = 15;
		boolean b1 = a > b && c >d;
		boolean b2 = a != b || b > c;
		boolean b3 = a <= b || c <= d;
		System.out.println(b1 + " " + b2 + " " + b3);
	}
}
//결과값
false true true

 

6. 할당 연산자

    - '='와  +=, -= 등이 있다.

public class Code_37 {
	public static void main(String[] args)
	{
		int a = 20, b = 7, c = 30, d = 2, e = 8;
		int x = a / b + c * d % e;
		System.out.println("x = " + x);
		boolean y = a > b + c && d < 8;
		System.out.println("y = " + y);
		int z = 100;
		z += a + b - c * d / e;
		System.out.println("z = " + z);
	}
}
//결과값
38
2

 

7. 연산자 우선순위

    - 산술 > 관계 > 논리 > 할당 연산자 순으로 우선순위가 있다.

public class Code_37 {
	public static void main(String[] args)
	{
		int a = 20, b = 7, c = 30, d = 2, e = 8;
		int x = a / b + c * d % e;
		System.out.println("x = " + x);
		boolean y = a > b + c && d < 8;
		System.out.println("y = " + y);
		int z = 100;
		z += a + b - c * d / e;
		System.out.println("z = " + z);
	}
}
//결과값
x = 6
y = false
z = 120

 

8. 형 변환과 캐스터 연산자

     1) 자동 형 변환

public class Code_38 {
	public static void main(String[] args)
	{
		long x = 10000L;
		float y;
		y = x;
		System.out.println("y : " + y);
		double z;
		z = x;
		System.out.println("z : " + z);
	}
}
//결과값
y : 10000.0
z : 10000.0

public class Code_39 {
	public static void main(String[] args)
	{
		char x = 'a';
		int y;
		y = x;
		System.out.println("y : " + y);
		System.out.println("y : " + (char)y);
	}
}
//결과값
y : 97
y : a
  • 작은 데이터를 큰 데이터 공간에 넣을 때는 자동 형 변환이 일어난다.

   2) 캐스트 변환

        - (변환하고자 하는 자료형) 변수

public class Code_40 {
	public static void main(String[] args)
	{
		byte bi, bj;
		int i = 100, j = 300;
		bi = (byte) i;
		System.out.println("bi : " + bi);
		bj = (byte) j;
		System.out.println("bj : " + bj);
	}
}
//결과값
bi : 100
bj : 44

public class Code_41 {
	public static void main(String[] args)
	{
		int i;
		double x = 10.5, y = 2.8;
		i = (int)(x/y);
		System.out.println("(int) x/y : " + i);
	}
}
//결과값
(int) x/y : 3
  • 정수형(bytem short, int, long) 사이에 캐스트 연산자를 사용하는 경우 숫자의 범위에 주의해야 한다.
public class Code_42 {
	public static void main(String[] args)
	{
		byte b1 = 10, b2;
		int i = 5;
		b2 = (byte)(b1 + i);
		System.out.println("b2 : " + b2);
	}
}
//결과값
b2 : 15
728x90
반응형

'Framwork > Java기초' 카테고리의 다른 글

Chapter 6. 메소드  (0) 2022.10.26
Chapter 5. 배열과 문자열  (2) 2022.10.23
Chapter 4. 조건문과 반복문  (0) 2022.10.09
Chapter 2. 변수, 자료형, 주석  (1) 2022.09.24
Chapter 1. 자바 시작하기  (6) 2022.09.21