연산(operation)
프로그램에서 데이터를 처리하여 결과를 산출하는 것
연산자 operator
연산에 사용되는 표시나 기호 ( + , - , * , ==)
연산의 종류를 결정 짓는 기호
연산자의 종류
산술 : + , -, * , / , %
증감 : ++ , --
비교 : == , != , ...
논리 : && , || , ...
대입 : = , += , -= , ...
피연산자 operand
연산자와 함께 연산되는 데이터 (x , y , z 변수)
연산식 expression
연산자와 피연산자를 이용하여 연산의 과정을 기술
연산자의 종류
산출된는 값의 타입(자료형)은 연산자별로 다르다.
산술연산자: 숫자타입(byte, short, int, long, float, double)으로 결과값이 나옴
비교연산자, 논리연산자: 논리타입(boolean)으로 결과값이 나온다.
연산식은 반드시 하나의 값을 산출한다.
값 대신에 연산식을 사용할 수 있다.
보통 연산식의 값은 변수에 저장하는데,
x 와 y 변수의 값을 더하고 나서 결과값을 result 변수에 저장한다.
int result = x + y;
연산식은 다른 연산자의 피연산자 위치에 올 수 있다.
비교연산자인 < 의 왼쪽 피연산자로(x + y) 연산식 사용됨.
(x + y) = 5 보다 작은 지 검사 한 후 결과값(true or false)을 변수에 저장
boolean result = ( x + y ) < 5;
연산의 방향과 우선순위
대부분의 연산자는 왼쪽에서 오른쪽방향이지만
단항(++, --, ~,, !), 부호(+,-), 대입 연산자(=, +=,-=, ...)는 오른쪽에서 왼쪽 방향으로 연산을 수행한다.
연산의 방향과 우선 순위
1. 단항 > 이항 > 삼항 연산자 순으로 우선 순위를 가진다.
2. 산술 > 비교 > 논리 > 대입 연산자 순으로 우선 순위를 가진다.
3. 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다. ( →)
4. 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정한다.
연산자의 종류
연산자는 산출방법에 따라 산술, 부호, 문자열, 대입, 증감 , 비교연산자로 구분
피연산자는 피연자수 수에 따라 단항, 이항, 삼항 연산자로 구분
단항 연산자 : 피연산자가 단 하나뿐인 연산자. 부호 연산자(+, -) , 증감 연산자( ++, --)
이항 연산자 : 산술, 비교 논리 연산자
삼항 연산자 : 조건 연산자(조건식, A, B 와 같이 3개의 연산자가 필요하다)
단항 연산자
부호 연산자( + , - )
+,- 는 산술연산자, 부호연산자
부호 연산자일 때 하나의 피연산자만 필요로 하고 음수와 양수를 표현
+ 연산자는 변수값의 부호를 유지, - 연산자는 변수값의 부호를 양수 > 음수, 음수 > 양수 로 변경
⚠️ 부호 연산자의 결과가 int 타입
ex) byte 타입 변수를 부호 연산하면 int 타입으로 변환됨 그래서 컴파일 에러가 발생하고
부호 연산의 결과는 int 타입이므로 int 타입 변수에 저장해야한다.
증감연산자 ( ++ , -- )
증감 연산자는 변소의 값으 1 증가(++)시키거나 1 감소(--) 시키는 연산자를 말한다.
boolean 타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있다.
++연산자(증가 연산자)는 피연산자의 값에 1더해서 그 결과를 다시 피연산자에 저장
--연산자(감소 연산자) 는 -- 연산자는 피연산자의 값에서 1을 뺸 후 그 결과를 다 시 피연산자에 저장
연산식에서 증감 연산자만 사용된다면 증감 연산자의 위치는 상관없다
하지만 다른 연산자와 하께 사용한다면 증감연산자의 위치에 따라 연산식의 결과가 다르게나온다.
int result1 = 12
int result2 =11
중요) calc 프로그래머용 Byte 선택 Hex Dec Oct Bin 변환 확인
1. int a = 10, b = 7, c = 10, d = 7;
int e = a & b;
int f = c | d;
int g = e ^ f;
int h = ~g;
1) e = 2
2) f = 15
3) g = 13
4) h = -14
2. ← : 입력 숫자 지우기, CE : 마지막 입력값 삭제, C : 전체 계산식 삭제
3. HEX = 16진수, DEC = 10진수, OCT = 8진수, BIN = 2진수,
Or = | 논리합 연산, And = & 논리곱 연산, Not = ~ 부정 연산, Xor = 배타적 논리합 연산,
ROL = Rotate Left(왼쪽으로 쉬프트 연산), ROR = Rotate Right(오른쪽으로 쉬프트 연산),
Lsh = Left Shift(왼쪽 비트 이동 연산), Rsh = Right Shift (오른쪽 비트 이동 연산),
Mod = 나머지 구하는 연산자
4. BYTE = 1바이트, WORD = 2바이트, DWORD = 4바이트, QWORD = 8바이트
5. MS (Memory Save) : 계산기에 메모리를 저장
MR (Memory Read) : 저장된 메모리를 읽어옴
MC (Memory Clear) : 저장된 메모리를 지움
M+ (Memory +) : 저장된 메모리 부호를 +로 바꿈
M- (Memory -) : 저장된 메모리 부호를 -로 바꿈
DenyLogicOperator 논리 부정 연산자
논리부정연산자는 true를 false로, false를 true로 변경하기 때문에 boolean타입에서만 사용할 수 있다.
조건문과 제어문에서 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 떄 주로 사용, 또한 두가지 상태 true/flase 번갈아 가며 변경하는 토글기능 구현할 때 사용
package chapter03.sec02.exam03;
//!(not)
public class DenyLogicOperatorExample {
public static void main(String[] args) {
boolean play = true;
System.out.println(play);
play = !play; //false = !true
System.out.println(play); //flase
play = !play; //true = !flase
System.out.println(play); //true
}
}
이항 연산자
이항 연산자는 피연산자가 2개인 연산자
산술연산자( +, - , *, /, %)
문자열 결합 연산자 (+)
비교연산자(<, <=, >=, > ==, !=)
논리연산자(&&, ||, &, |,^, !)
대입연산자 ( =, +=, -=, *=, /=, %=)
ArithmeticOperato 산술 연산자
산술 연산자는 사칙연산자인 +,-,*,/ 나머지를 구하는 %까지 총 5개
산술연산자는 boolean 타입을 제외한 모든 기본 타입에 사용 가능
% 연산자 : 나머지를 돌려주는 연산자
int result = num % 3;
result 에 저장되는 값은 0,1,2 중 하나의 값이 된다.
num을 3으로 나누었을때 나머지는 0,1,2 중 하나이기 때문이다.
피연산자들의 타입이 동일하지 않을 경우 피연산자들의 타입을 일치시킨 후 연산을 수행해야한다
① 피연산자들이 byte, short, char 타입일 경우, 모두 int 타입으로 변환된 후 연산을 수행
ex) byte + byte → int + int = int
② 피연산자들이 모두 정수 타입이고 long 타입이 표함되어있을 경우, 모두 long타입으로 변환된 후 연산 수행
ex) int + long → long + long = long
③ 피연산자들 중 실수타입(float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산을 수행
ex) int + double → double + double = double
scannner: 문자열을 입력받아서 쓰는 class
package chapter03.sec02.exam04;
import java.util.Scanner;
//산술 연산자를 활용하는 자바 프로그램 소스 코딩 예시
public class ArithmeticOperatorExample {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("연산을 수행할 첫번째 정수를 입력해 주세요 ==>");
int num1 = scan.nextInt();
System.out.println("연산을 수행할 두번째 정수를 입력해 주세요 ==>");
int num2 = scan.nextInt();
int v1 = num1;
int v2 = num2;
// int v1 = 5;
// int v2 = 2;
int result1 = v1 + v2;
System.out.println("result1 =" + result1); //result = 7
int result2= v1 - v2;
System.out.println("result2 =" + result2); //result = 3
int result3 = v1 * v2;
System.out.println("result3 =" + result3); //result = 10
int result4= v1 / v2;
System.out.println("result4 =" + result4); //result = 2
int result5 = v1 % v2;
System.out.println("result5 =" + result5); //result = 1
double result6= (double) v1 / v2;
System.out.println("result6 =" + result6); //result = 2.5
}
}
char 타입의 산술연산
char 타입도 정수 타입으로 산술연산이 가능, 주의할 점은 int 타입으로 변환되므로 연산결과는 int타입이 된다.
char 변수가 산술연산에 사용되면 int 타입으로 변환되기 때문에,
연산 결과는 int 타입이 됩니다.
그래서 강제 형변화 또는 c3 변수를 int 타입으로 처리해야 합니다.
package chapter03.sec02.exam05;
public class CharOperationExample {
public static void main(String[] args) {
char c1 = 'A' + 1; //옆에서 'A'는 65코드이며, +1 되므로 66코드인 'B'가 c1 변수에 대입됩니다.
System.out.println("c1 = " + c1); //c1 = B
char c2 = 'A'; // 옆에서 'A'는 65 코드이며, 그대로 65코드가 c1변수가 대입되며,'A'로 표현됩니다.
System.out.println("c2 = " + 2); //c2 = A
// char 변수가 산술연산에 사용되면 int 타입으로 변환되기 때문에,
// 연산 결과는 int 타입이 됩니다.
// 그래서 강제 형변화 또는 c3 변수를 int 타입으로 처리해야 합니다.
// char c3 = c2 + 1;
// char c3 = (char) (c2 + 1);
// System.out.println("c3 = " + c3); // c3 = B
int c3 = c2 + 1;
System.out.println("c3 = " + c3); // c3 = 66
System.out.println("c3 = " + (char)c3); // c3 = B
}
}
StringConcat 문자열 결합 연산자
문자열 결합 연산자는 + 문자열을 서로 결합하는 연산자.
package chapter03.sec02.eaxm06;
// 문자열 (String) 결합(Concat) 예시 자바 프로그램 소스 코딩을 합니다.
public class StringConcat {
public static void main(String[] args) {
String str1 = "JDK" + 6.0;
System.out.println(str1); //JDK6.0
String str2 = str1 + "특징";
System.out.println(str2); //JDK6.0 특징
String str3 = "JDK" + 3 + 3.0;
System.out.println(str3); //JDK33.0
String str4 = 3 + 3.0 + "JDK";
System.out.println(str4); //6.0 JDK
}
}
CompareOperator 비교연산자
비교연산자는 피연산자의 대소 또는 동등을 비교해서 true/false를 산출
대소 연산자는 boolean을 제외한 기본 타입에 사용
동등연산자는 모든 타입에 사용
비교연산자는 흐름제어문은 if, while, for 에서 주로 이용
비교연산자에도 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.
ex) 'A' == 65 → 65 == 65 → true
3 == 3.0 → 3.0 == 3.0 → true
예외 ) 0.1 == 0.1f → false
package chapter03.sec02.exam07;
//비교 (Compare) 연산자(Operator) 활용 예시를 소스 코딩합니다.
public class CompareOperatorExample {
public static void main(String[] args) {
int num1 = 10;
int num2 = 10;
boolean result1 = (num1 == num2);
System.out.println("result1 = " + result1); //result1 = true
boolean result2 = (num1 != num2);
System.out.println("result2 = " + result2); //result1 = false
boolean result3 = (num1 <= num2);
System.out.println("result3 = " + result3); //result1 = true
char char1 = 'A';
char char2 = 'B';
boolean result4 = (char1 < char2);
System.out.println("char1 = " + (int)char1);
System.out.println("char2 = " + (int)char2);
System.out.println("result4 = " + result4);
}
}
package chapter03.sec02.exam08;
public class CompareOperatorExample2 {
public static void main(String[] args) {
int v2 = 1;
double v3 = 1.0;
System.out.println(v2 == v3); //true
double v4 = 0.1;
float v5 = 0.1f;
System.out.println(v4 == v5); // flase
System.out.println((float)v4 == v5); //true
}
}
LogicalOperator 논리연산자
논리 연산자 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리부정(!) 연산을 수행. 논리연산자의 피연산자는 boolean 타입만 사용가능
&& : 앞의 피연산자가 false라면 뒤에 피연산자를 평가하지 않고 바로 false 값 산출, 하나라도 false 이면 전체가 false
& : 두 연산자 모두 평가해서 산출결과를 냄
&& 가 더 효율적으로 동작
|| : 앞의 피연산자가 true 라면 뒤의 피연산자를 평가하지 않고 바로 true 산출, 하나라도 true이면 전체연산식은 true
| : 두 피연산자 모두 평가해서 산출
|| 가 더 효율적으로 동작
안에 값을 넣으면 false가 나오기 때문에 결과값에 안나온다.
package chapter03.sec02.exam09;
public class LogicalOperator {
public static void main(String[] args) {
int charCode = 'A';
if ((charCode>=65) & (charCode<=90)){
System.out.println(charCode); //65
System.out.println("대문자군요");
}
if ((charCode>=97) && (charCode<=122)){
System.out.println(charCode); // flase
System.out.println("소문자군요");
}
if ((charCode<48) && (charCode>57)){
System.out.println(charCode); // flase
System.out.println("0-9 소문자군요");
}
int value = 6;
if((value%2==0) | (value%3==0)) {
System.out.println("value = " + value); //value6
System.out.println("2 또는 3의 배수 군요");
}
if((value%2==0) || (value%3==0)) {
System.out.println("value = " + value); //value6
System.out.println("2 또는 3의 배수 군요");
}
}
}
AssignmentOperator 대입연산자
오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장 x ← y
오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있다.
단순대입연산자 : 단순히 오른쪽 피연산자의 값을 변수에 저장
복합 대입 연산자 : 정해진 연산을 수행한 후 결과를 변수에 저장
대입연산자는 가장 낮은 연산 순위를 가지고 있다.
연산 진행 방향 오른쪽에서 왼쪽
package chapter03.sec02.exam10;
// 대입(할당 : Assignment) 연산자(Operator) 활용 자바 프로그램 예시 소스 코딩입니다.
public class AssignmentOperator {
public static void main(String[] args) {
int result = 0;
result += 10; //result = result +10;
System.out.println("result =" + result); //result = 10
result -= 5; //result = result - 5;
System.out.println("result =" + result); //result = 5
result *= 3; //result = result * 3;
System.out.println("result =" + result); //result = 15
result /= 5; //result = result / 5;
System.out.println("result =" + result); //result = 3
result %= 3; //result = result % 3; >>3 % 3 의 몫은 1이지만 나머지는 0 이기때문에 결과값 0
System.out.println("result =" + result); //result = 0
}
}
ConditionalOperatior 삼항 연산자 (조건연산식)
삼항연산자(?:)는 3개의 피연산자를 필요로하는 연산자를 말한다.
?앞의 조건식에 따라 콜론 앞뒤의 피연산자가 선택된다고해서 조건 연산식이라고 부른다.
(조건식) : ? A : B 를 말하며 조건이 TRUE 이면 A를 산출하고, false이면 B를 산출
package chapter03.sec02.exam11;
import java.util.Scanner;
//삼항 연산자(조건부 연산식) 활용 자바 프로그램 코딩 예시입니다.
public class ConditionalOperatiorExample {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("점수를 입력하세요");
int num = scan.nextInt();
//
int score = num;
char grade = (score >= 90 ) ? 'A' : ((score >= 80 ) ? 'B' : 'C');
System.out.println(score + "점은" + grade + "등급입니다");
// int score = 75;
// char grade;
// if (score > 90) {
// grade = 'A';
// System.out.println(score + "점은 " + grade + "등급입니다.");
// }else if (score > 80) {
// grade = 'B';
// System.out.println(score + "점은 " + grade + "등급입니다.");
// }else {
// grade = 'C';
// System.out.println(score + "점은" + grade + "등급입니다.");
// }
}
}
'☭DEVELOPER > #2 웹개발(자바기반 풀스택)' 카테고리의 다른 글
[BACKEND]JAVA_ECLIPSE08 반복문: for문, while문, do-while문 (0) | 2023.08.18 |
---|---|
[BACKEND]JAVA_ECLIPSE07 조건문과 반복문 (0) | 2023.08.18 |
[BACKEND]JAVA_ECLIPSE05_변수와 시스템 입출력 (0) | 2023.08.17 |
[BACKEND]JAVA_ECLIPSE04 타입변환 (0) | 2023.08.17 |
[BACKEND]JAVA_ECLIPSE02 자료형과 변수 (0) | 2023.08.17 |