[JAVA] 연산자
2022. 8. 1. 13:53ㆍJAVA
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 |