-
[JAVA] 연산자(Operator)언어/JAVA 2022. 9. 7. 17:08
연산의 우선순위
1. ( )
2. 변수의 앞에 사용되었다는 가정하에 ++, --
3. 곱셈, 나눗셈, 나머지
4. 덧셈, 뺄셈
5. 비교(관계)연산자
6. 논리연산
7. 대입연산
1. 산술연산자
int n=50; // 피연산자로 쓰인 변수와 연산의 결과를 저장할 변수가 같은 연산 n=n+10; // 현재 n값(50)과 두번째 피연산자인 10이 CPU로 전달되어 덧셈됨 // 연산결과가 돌아와서 다시 n변수에 저장됨 // 연산에 참여했던 n값 50은 사라지고, 연산 결과인 60이 n변수에 남음 // 간략하게 다음과 같이도 사용함-> n+=10
n++, n--
-특정 변수의 값을 1 증가하거나 감소시킬 수 있는 연산자
-대입연산자(=)를 사용하지 않고 값을 변경함
// 단항연산일때는 ++나 --를 앞 또는 뒤에 어느 곳에 붙여도 똑같이 연산됨 n=50; ++n; System.out.println("++n -> n: "+n); // ++, -- 연산 기호가 앞 또는 뒤에 있을 때 차이가 나는 경우 // 다른 연산에 섞여 있을 때 // ++, -- 연산이 뒤쪽에 있는 경우 // -> 현재 값으로 속해있는 연산에 참여 후, 1 증가 n=10; System.out.println("현재 값: "+n); int k=n++; System.out.println("k: "+k); // 10 출력 System.out.println("n: "+n); // 11 출력 // ++, -- 연산이 앞쪽에 있는 경우-> 1 증가 후 다른 연산에 참여 n=10; System.out.println("현재 n: "+n); k=++n; System.out.println("k: "+k); // 11출력 System.out.println("n: "+n); // 11출력
2. 관계연산자(비교연산자)
-좌향기준 >(초과), <(미만), >=(이상≥), <=(이하≤), ==(같다), !=(같지않다)
-좌향과 우향의 크기를 비교하여 true/false 값이 결과가 되는 연산
-관계식이 올바른 경우 true, 관계식이 틀린 경우 false가 연산의 결과가 됨
-문자(char) 데이터의 비교는 각 데이터가 갖는 ASCII code 값으로 비교
String
-할 수 있는 비교 연산은 ==와 != 둘 밖에 없으며 이마저도 우리가 원하는 결과로 연산되지 않음. 그래서 ==와 != 연산이 오류없이 가능은 하지만 이도 사용은 하지 않음
-다른 자료형과 다르게 변수가 직접 문자들을 저장하고 있지 않음
-문자들은 별도의 장소에 저장되고 변수는 저장위치 값만 저장하고 있어서 변수들 간의 비교는 저장위치정보의 비교이므로 연산이 의미가 있지도 않고 가능하지도 않음
-자료 간의 비교는 별도로 만들어져 있는 도구를 이용
String s1="1234", s2="987"; int r=s1.compareTo(s2); System.out.printf("%s>%s -> %d\n",s1,s2,r); r=s2.compareTo(s1); System.out.printf("%s>%s -> %d\n",s2,s1,r); // s1.compareTo(s2)의 경우 s1이 크면 결과가 양수로 계산됨 // 반대로 s2가 크면 음수로 계산됨 // 앞글자(s1)에서 뒷글자(s2)의 아스키코드 값을 뺄셈한 결과를 얻음 r=s1.compareTo(s2); System.out.printf("%s>%s -> %b\n",s1,s2, r>0); System.out.printf("%s>%s -> %b\n",s2,s1, r<0); // String은 앞 문자순으로 비교 boolean b=s1.equals(s2); // 둘이 같으면 true, 틀리면 false System.out.printf("%s==%s -> %b\n", s1,s2,b); b=s1.equals("1234"); System.out.printf("%s==%s -> %b\n", s1,"1234",b);
3. 논리연산자
-다수개의 관계(비교)연산식 결과(true/false) 값을 연산하여 하나의 boolean 값을 결과로 얻는 연산
-피연산자: boolean, 연산의 결과: boolean
AND 연산자(&&)
-좌항과 우항의 관계(비교)식 결과 또는 boolean 값이 모두 true인 경우 true과 결과값
-좌항과 우항 중 하나라도 false 경우 false가 결과값
-좌항의 비교연산 결과가 false인 경우 우항의 식을 비교하지 않음
System.out.printf("F&&F=%b\n",false&&false); System.out.printf("T&&F=%b\n",true&&false); System.out.printf("F&&T=%b\n",false&&true); System.out.printf("T&&T=%b\n",true&&true);
OR 연산자(||)
-좌항과 우항의 결과 또는 boolean 값이 모두 true인 경우 true과 결과값
-좌항과 우항 중 하나라도 false 경우 false가 결과값
-좌항의 결과가 ture인 경우 우항의 식을 비교하지 않음
System.out.printf("F||F=%b\n",false||false); System.out.printf("T||F=%b\n",true||false); System.out.printf("F||T=%b\n",false||true); System.out.printf("T||T=%b\n",true||true);
NOT 연산자(!)
-단항연산자(피연산자가 1개임)
-관계식의 결과를 반대값으로 결과를 냄 true→false, false→true
boolean b1=false; System.out.printf("Not-%b=%b\n",b1,!b1); System.out.printf("Not-%b=%b\n",true,!true);
ex) 윤년
-해당 년도가 4의 배수이면서 100의 배수가 아니거나 400의 배수인 해
// year변수에 저장된 년도가 윤년이면 true 평년이면 false int year1=2020, year2=2021; System.out.printf("2020 윤년인가요? %b\n", (year1%4==0)&&(year1%100!=0)||(year1%400==0)); System.out.printf("2021 윤년인가요? %b\n", (year2%4==0)&&(year2%100!=0)||(year2%400==0));
'언어 > JAVA' 카테고리의 다른 글
[JAVA] if문 (1) 2022.09.07 [JAVA] 자료형변환(Casting) (0) 2022.09.07 [JAVA] 변수(Variable) (0) 2022.09.07 [JAVA] println (0) 2022.09.07 [JAVA] 출력(자리수 조절) (0) 2022.09.07