[JAVA] 연산자

2022. 8. 1. 13:53JAVA

1. 산술연산자(+, - , * , / , %)

 

  • 일반적인 사칙연산과 동일
  • % 연산자 : 나머지 연산자(또는 퍼센트 연산자)라고 하며, 나눗셈 결과에 대한 나머지를 계산하는 연산자
  • / 연산자 : 나눗셈 결과에 대한 몫을 계산하는 연산자
  • 산술 연산 시 자동 형변환
  • 연산 수행 시 피연산자끼리의 데이터타입을 일치시킨 후 연산을 수행

 

규칙1) int 타입보다 작은 타입(byte, short, char)끼리의 연산은 모두 int 타입으로 변환 후 연산을 수행

=> 즉, 결과값이 무조건 int 타입이 됨

** 자바는 정수연산 시 int 타입이 기본형, 실수는 double이 기본형

ex) byte + byte = (int)byte + (int)byte = int + int = int

ex2) char + int = (int)char +int = int + int = int

 

규칙2) int 타입보다 큰 타입과의 연산은 큰 타입으로 변환 후 수행

=> 즉 결과값이 무조건 큰 타입이 됨

ex) int + long = (lont)int +long = long + long = long

ex2) long + float = (float)long + float = float + float = float

 

 

public class Ex {

	public static void main(String[] args) {
		//출력문에 연산식을 기술하면 연산 결과를 출력
		System.out.println(10+2);
		System.out.println(10-2);
		System.out.println(10*2);
		System.out.println(10/2);
		System.out.println(10%2);
		
		System.out.println("------------------------");
		
		//int형 변수 a에 10을 저장하고, b에 2를 저장
		int a = 10, b=2;
		System.out.println(a+b);
		System.out.println(a-b);
		System.out.println(a*b);
		System.out.println(a/b);
		System.out.println(a%b);
		
		System.out.println("--------------------------");
		
		// 연산 결과를 변수에 저장 후 출력
		int c; // 연산 결과를 저장할 변수 c 선언
		
		//a 와 b의 덧셈 결과를 변수 c에 저장
		c=a+b;
		System.out.println(a + " + " + b + " = " + c);
		System.out.printf("%d + %d = %d\n",a,b,c);
		
		c=a-b;
		System.out.println(a + " - " + b + " = " + c);
		System.out.printf("%d - %d = %d\n",a,b,c);
		
		c= a*b;
		System.out.println(a + " * " + b + " = " + c);
		
		c=a/b;
		c=a%b;
		
		
	}

}
public class Ex2 {

	public static void main(String[] args) {
		byte b1 = 10;
		byte b2 = 20;
		byte b3 ;
		
		//b1과 b2의 연산 결과를 byte타입 변수 b3에 저장할 때 문제 발생!
//		b3 =b1+b2//오류발생! byte + byte = int + int = int 이기때문
		// int 타입을 byte 타입으로 저장하려면 강제 형변환(byte) 필요
//		b3 = (byte)b1 + (byte)b2; // 다시 가각 int로 변환되므로 또 오류 발생
		//=> (int)(byte)b1 + (int)(byte)b2 = (int)b1 + (int)b2 => int
		
		//연산 결과에 형변환 연산자를 적용하여 byte 타입으로 변환해야한다!
		b3 = (byte)(b1 + b2); //(int)byte +(int)byte = (byte)int = byte
		System.out.println(b3);
		
//		short s = b1 + b2; // 오류발생 byte + byte = int + int = int 이기때문
		// short 타입 변수 s에 저장 (자동 형변환) 불가!
//		short s = (short)(b1 + b2);
		
		System.out.println("---------------------------------");
		
		char ch = 'A';
		//char 타입 변수 ch2에 ch 값에 2를 더한 결과를 저장
//		char ch2 = ch + 2; //오류 발생! char + int = (int)char + int 이므로
		//=> 결과값이 int가 되어 char 타입 변수에 저장 불가
		char ch2 = (char)(ch +2); //연산 결과를 char 타입으로 변환하면 67에 해당하는 문자 'C'(67을 char 타입으로 변환한 데이터)가 저장됨
		
		System.out.println(ch2);
		System.out.println(ch+2); //ch='A' -> int(65),65+2=67
		//=> ch +2 의 결과값은 int형 이므로 문자 'C' 대신 67 출력
		//=> 이 결과값을 다시 char 타입으로 변환하면 문자 'C' 출력
		System.out.println((char)(ch + 2)); // 67을 char 타입으로 변환하여 'C' 출력됨
		
		System.out.println("----------------------------------");
		
		int i = 100;
		long l = 200;
		// int형 변수 i2에 i+l  결과값 저장
//		int i2 = i + l; // int+ long = long이므로 int 타입 변수에 저장 불가
		int i2 = (int)(i+l); //int 타입으로 강제형변환
		System.out.println(i2);
		
		float f = 3.14f;
		//=>float f =(float)3.14
		long l2 = (long)(l +f); //long + float = float 이므로 long으로 변환
		System.out.println(l2);

		System.out.println("--------------------------------");
		
		System.out.println(3/2);
		// 나눗셈 연산은 몫을 계산하며, int/int=int가 되어
		//3/2의 연산 결과는 정수 1이 출력됨
		//만약,3/2결과를 1.5의 결과값으로 얻고 싶을 경우
		//정수가 아니느 실수 형태의 나눗셈 연산으로 연산을 수해해야함
		// 따라서, 최소한 피연산자 중 하나를 실수로 변환한 후 연산을 수행
		//=> 규칙2에 의해서 int형 보다 큰 데이터타입을 따라감
		
		System.out.println((double)3/2); // double / int = double
		System.out.println(3/2.0); // int / double = double
		// => 주로, 수치 데이터는 .0을 붙여서 실수로 변환하고 실수형 변수는 형변환 연산자로 변환을 한다.
		
		System.out.println("==========================================");
		
		//실수끼리의 연산(float과double간의 연산)
		float f1 = 0.1f;
		double d1 = 0.1;
		
		System.out.println(f1);
		System.out.println(d1);
		
		System.out.println(f1+d1);
		//float-> double로 변환하여 double + double = double 이 된다
		//따라서, 0.1f +0.1 = 0.1 + 0.1 = 0.2인데
		//근사치 표현에 의해 잘못된 결과가 발생할 수 있다
		// =>double->float 타입으로 강제변환 후 연산을 수행하거나 두 실수 모두 정수로 변환하여 연산 수행 후 다시 실수로 변환
		
		System.out.println(f1 + (float)d1);
		System.out.println((int)(f1*10) + (int)(d1*10) / 10.0);
		
		System.out.println("===========================================");
		
		//리터럴끼리 연산시에는 자동 형변환이 발생하지 않는다!
		byte b4 = 10 +20;
		System.out.println(b4);
		
		//단, 리터럴끼리의 연산이라도 표현 가능 범위를 초과하면 오류 발생!
//		byte b5 = 10 +200 //byte 타입 범위(-128 ~ 127)를 초과하므로 int로 취급됨
		
	}

}

 

 

2. 연결 연산자

  • 문자열에대한 덧셈연산자(+)
  • 어떤 데이터를 문자열과 덧셈연산자로 연산할 경우 산술연산의 덧셈이 아닌 단순문자열 결합(연결)으로 사용됨
  • 이 때, 어떤 데이터를 문자열 타입으로 변환하여 두 문자열을 연결

ex) "문자열" + "문자열" = "문자열문자열"

int + "문자열" = "int" + "문자열" = "int문자열"

 

 

public class Ex3 {

	public static void main(String[] args) {
		int a =10, b = 20;
		System.out.println(a+b); //일반 산술연산(덧셈 기능)
		System.out.println("a = "+a); //"문자열" + 정수 = "문자열정수"
		
		String str = "a = " +a;
		System.out.println(str);
		
		System.out.println("b = " + b);
		
		int c = a+b;
		System.out.println(a + " + " + b + " = " + c);
		//1. "10 +
		
		System.out.println("덧셈결과 : " +c);
		System.out.println("==============================");
		
		System.out.println(10 +20); //30
		System.out.println(10 + "20"); //1020
		System.out.println("10"+20); //1020
		
		System.out.println(10 +"20" + 30); //102030 문자열 결합
		System.out.println("10"+20+30);//102030 문자열 결합
		
		System.out.println(10+20+"30");//3030
		
		//String 타입 변수 name에 자신의 이름을 저장
		//int 타입 변수 age에 자신의 나이를 저장
		String name = "냐냐";
		int age = 20;
		
		//주민번호 표현시
//		int jumin = 901234 - 5678945; // 결과값 잘못됨 뺄셈취급
//		int jumin = 9012345678945; //오류발생 int타입으로 표현불가능
//		long jumin = 9012345678945L; //long타입으로 표현하거나
		String jumin = "901234 - 5678945";
		
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("주민번호 : " + jumin);
		
		

	}

}

 

 

 

 

 

<연산자 우선순위>

단항 산술 관계 비트 논리 조건 대입

'JAVA' 카테고리의 다른 글

[JAVA] 형 변환  (0) 2022.07.28
[JAVA] 메서드  (0) 2022.07.28
[JAVA] 변수  (0) 2022.07.26
[JAVA] 주석  (0) 2022.07.25
[JAVA] 자바 개발 환경 구축  (0) 2022.07.25