항(Operands)과 연산자(Operators)
연산 과정에서 사용되는 데이터나 값을 항(Operands)이라고 합니다.
하나 이상의 항을 사용하여 특정 연산을 수행하는 기호를 연산자(Operators) 라고 합니다.
대입 연산자 (Assignment Operator) : ‘ = ‘
대입 연산자는 특정 값이나 다른 변수의 결과를 변수에 할당(대입)하는 데 사용됩니다. 대부분의 이항 연산자 중에서 실행 우선순위가 가장 낮아서, 대부분의 연산이 이루어진 후에 마지막으로 값이 할당됩니다. (연산에 순서는 오른쪽에서 왼쪽으로) 기본 형태는 왼쪽 변수 = 오른쪽 표현식(값, 변수, 또는 계산식)입니다.
부호 연산자 : ‘ +, - ‘
부호 연산자는 변수의 부호를 변경하거나 유지하는 단항 연산자입니다.
+연산자는 변수의 부호를 그대로 두고, - 연산자는 변수의 부호를 반전시킵니다. 변수의 실제 값을 변경하고자 할 때는 부호 연산자와 함께 대입 연산자를 사용해야 합니다.
자바실습!
package ch03;
/**
* 부호 연산자 단항 연산자 --> 변수에 부호를 변경(리털값에 부호를 변경)
*/
public class Operation1 {
public static void main(String[] args) {
int intData = 1000;
System.out.println(+intData);
System.out.println(-intData);
System.out.println("---------------------------");
System.out.println(intData);
//반드시 기억할것! -> (부호 연산자는 변수에 실제 값이 변경 된 것은 아니다)
//메모리 공간 안에 실제 값을 변경 하려면 어떻게 해야 할까?
//답은 -> 대입 연산자와 함께 사용해야 한다.
intData = -intData;
System.out.println("실제 변수안에 들어있는 값 : " +intData);
//연습
int oneStepDistance = 1;
final int ZERO_POINT = 0; //상수를 사용할 땐 대문자를 권장 한다.
int currentPostion = 0;
//제로 포인트에서 왼쪽으로 3칸 이동한 값을 출력 하시오.
//식 작성
currentPostion = ZERO_POINT - (oneStepDistance * 3);
//결과값 출력
System.out.println(currentPostion);
//절대값이란?
//절대값이란 어떤 수의 크기를 나타내는 것으로 그 수가 0에서 얼마나 떨어져
//있는지를 표시합니다.
//즉, 어떤 수의 절대값은 그 수가 양수이든 음수이든 상관없이 항상
//양수입니다.
//참고로 0의 절대값은 0입니다.
//currentPostion 값이 양수 였다면 부호연산자를 통해 변경한다면
//절대값이 틀려지게 된다.
System.out.println(-currentPostion);
//우리는 절대값을 구하는 알고리즘을 만들어야 한다.
//자바 개발자들이 이미 만들어 둔 도구 이다.
//Math math; //수학과 관련된 기능들에 모음이다.
System.out.println("Math 라이브러리 사용 : " + Math.abs(currentPostion));
}//end of main
}//end of class
산술 연산자
자바 실습!
package ch03;
public class Operation2 {
public static void main(String[] args) {
int result1 = 5 + 3;
int result2 = 5 - 3;
int result3 = 5 * 3;
//고민해볼 사항
//int result4 = 5 / 3;
double result4 = 5.0 / 3;
int result5 = 5 % 3;
System.out.println("result1 " + result1);
System.out.println("result2 " + result2);
System.out.println("result3 " + result3);
System.out.println("result4 " + result4);
System.out.println("result5 " + result5);
//문제
//1. (12 + 3) / 3 값을 화면에 출력해 보세요
//변수명, 데이터 유형은 스스로 결정하고 식을 만들어 보세요
int plus = (12 + 3) / 3;
System.out.println(plus);
//2. (25 % 2) 값을 화면에 출력해 보세요
//어떤 수를 2로 나누었을 때 나머지가 0이면 짝수 1이면 홀수
double TWO = (25.0 % 2);
System.out.println(TWO);
//3. 15를 4로 나눈 후, 그 결과의 절대값을 출력하세요
double MA = (15 / 4);
System.out.println(Math.abs(MA));
//도전 문제
//직접 산술 연산자 문제 만들기(2문제)
//1. (66 / 17) / 3 의 절대 값을 출력하세요
int mama = (66 / 17) / 3;
System.out.println(Math.abs(mama));
//2. 의원이 선거공략으로 부산시 국민 모두에게 10,000원을 주기로 했다.
//부산시 국민의 수는 3,000,000명이다.
//나라에서 금액지원 33%를 받을수 있을때
//의원이 받을수 있는 총 지원 금액은?
int busan = 3000000;
int per = 10000;
double KR = 0.33;
double Money = (KR * per * busan);
System.out.println(Money);
}//end of main
}//end of class
단항 연산자
변수의 값을 오직 1 더하거나 1 뺄때만 사용한다.연산자가 항의 앞에 있는지 뒤에 있는지에 따라 연산 시점과 결과가 달리진다.
문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함
자바 실습!
package ch03;
/**
* 증감, 감소 연산자
* 변수에 접근해서 그 값을 조직 1증가 또는 1감소 시킨다.
*/
public class Operation3 {
public static void main(String[] args) {
int value1 = 1;
//value++1;
++value1;
System.out.println(value1);
//변수에 접근해서 1감소 시키기
int value2 =1;
value2--;
System.out.println(value2);
//증강 연산자가 변수 뒤에 올 때 (후의 연산자)
int intData1 = 10;
int resultData;
//후의 연산자는 ; 기준으로 동작합니다
// 11 <--- 10 + 1 ???
resultData = intData1++;
System.out.println(resultData); //결과는 10
System.out.println(intData1);
// ; 세미콜론 기준으로 끝나고 변수에 접근해서 1을 증가 시켰다.
// --->여러분들은 전위 연산자로 사용하자!
//증감 연산자가 변수 앞에 올 경우(전위 연산자)
int intdata2 = 100;
int resultData2;
resultData2 = ++intdata2;
System.out.println(resultData2);
//결론 : 증감 연산자는 변수의 값을 오직 1 증가 시킬때 사용 한다.
//항에 앞, 뒤 위치에 따라서 연산에 순서가 다르다.
}
}
복합 대입 연산자
대입 연산자와 다른 연산자가 함께 쓰이는걸 뜻한다
ex : =, +, -, *, % (+=, -=, *=, %=)
자바 실습!
package ch03;
/**
* 복합 대입 연산자란? 대입 연산자와 다른 연산자가 함께 쓰이는 것(산술연산자)
*/
public class Operation4 {
public static void main(String[] args) {
int score = 5;
//score += 10;
System.out.println("점수확인 : " + score);
//도전 연습 --> score += 10;
// score 라는 변수에 접근해서 기존에 존재하는 값에 더하기 10을 해주세요
// 15 = 5 + 10
//score = score + 10;
score += 10;
System.out.println(score);
System.out.println("-----------------------");
int n1 = 100;
//n1이라는 변수에 접근해서 기존에 있는 값에 추가로 10을 더해주세요
//n1 = n1 + 10;
n1 += 10;
System.out.println("n1 :" + n1);
//score 변수에 접근해서 10점 감소시켜주세요
//score = score - 10;
score -= 10;
//!점수를 두배 증가
score *= 2;
//score = score * 2;
//!점수를 반으로 감소
score /= 2;
System.out.println("score : " + score);
}
}
연습풀이!
package ch03;
/**
* 복합 대입 연산자란? 대입 연산자와 다른 연산자가 함께 쓰이는 것(산술연산자)
*/
public class Operation4_1 {
public static void main(String[] args) {
int num1 = 0;
// num1 = num1 + 2;
num1 += 2;
System.out.println(num1);
int num2 = 0;
// num2 = num2 - 2;
num2 -= 2;
System.out.println(num2);
int num3 = 1;
num3 *= 3;
System.out.println(num3);
int num4 = 10;
num4 /= 2;
System.out.println(num4);
int num5 = 5;
num5 %= 3;
System.out.println(num5);
}
}
관계(비교)연산자
이항 연산자란,
연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함
조건문, 반복문의 조건식으로 많이 사용 됨
자바 실습!
관계 연산자를 주어로 바라보고 하는 말이 사실인지 거짓인지 확인 하자.
package ch03;
import java.net.MulticastSocket;
/**
* 관계, 비교 연산자
* 연산의 결과 값이 무조건 true, false 반환 된다.
*/
public class Operation5 {
public static void main(String[] args) {
int num1 = 5;
int num2 = 3;
//관계 연산자를 주어로 바라 보자
boolean value = num1 > num2;
System.out.println(value);
System.out.println(3 < 5);
System.out.println(3 >= 5);
System.out.println(3 <= 5);
System.out.println(3 == 5);
System.out.println(3 != 5);
System.out.println("------------------------------");
System.out.println(num1 < num2);
System.out.println(num1 >= num2);
System.out.println(num1 <= num2);
System.out.println(num1 == num2);
System.out.println(num1 != num2);
}
}
논리 연산자
관계 연산자와 혼합하여 많이 사용 됨
연산의 결과가 true(참), false(거짓)으로 반환 됨
자바 실습!
package ch03;
import java.net.MulticastSocket;
/**
* 빠른 평가란?
* 논리 연산에 있어 첫 번째 조건이 결과를 결정할 때
* 두 번째 조건을 평가 하지 않는 것을 의미한다.
*/
public class Operation6 {
public static void main(String[] args) {
int number = 5;
int index = 0;
//!!빠른평가가 동작하는 식을 만들어 보자.
//논리곱을 이용한 빠른 평가 식을 만들어보자.
boolean result = ( (number = number + 10) < 10) && ( (index = index + 2) < 10 );
System.out.println("현재 number 변수의 값은 : " + number);
System.out.println("현재 index 변수의 값은 : " + index);
System.out.println("---------------------------------------");
// number 값 재설정
number = 5;
//논리합을 이용한 빠른 평가 식을 만들어보자.
//result = ( (number += 10) < 10 ) ||( (index += 2) < 10);
//아래와 같은식이다.
result = ( (number += 10) < 10 ) ||( (index += 2) < 10);
//문제
System.out.println("number : " + number);
System.out.println("index : " + index);
System.out.println("---------------------------------------");
//도전문제 number 와 index 반대로 변경해서 출력해보자.
result = ( (number += 10) >= 10 ) || ( (index += 2) > 10);
System.out.println(number);
System.out.println(index);
}
}
빠른 평가(short circuit evaluation)
빠른 평가(short-circuit evaluation)는 논리 연산에서 첫 번째 조건이 결과를 결정하는 경우, 두 번째 조건을 평가하지 않는 자바의 특성입니다.
논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false
앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음
자바 실습!
package ch03;
import java.net.MulticastSocket;
/**
* 논리 연산자
* 관계 연산자와 혼합하여 많이 사용 된다.
* 연산에 결과는 true, false 으로 반환 된다.
*/
public class Operation7 {
public static void main(String[] args) {
//논리 연산자는 3가지 종류가 있다.
//논리곱 ---> && (엠퍼센트, 엠퍼센트)
//논리합 ---> || (버티컬 바, 버티컬 바)
//부정 ---> !
int num1 = 10;
int num2 = 20;
//1.논리곱(&&)
// T = T && T
//논리곱은 전부 true 이면 true 를 반환 한다.
//하지만 하나라도 거짓이면 false 를 반환 한다.
boolean flag1 = (num1 > 0) && (num2 > 0);
System.out.println("flag1 : " + flag1);
// F = T && F
boolean flag2 = (num1 > 0) && (num2 < 0);
System.out.println(flag2);
System.out.println("----------------------------");
//2.논리 합
//둘중에 하나라도 true 이면 연산 결과는 무조건 true 이다
// T = T || F
boolean flag3 = (num1 > 0) || (num2 < 0);
System.out.println(flag3);
System.out.println("----------------------------");
//3.부정
System.out.println("부정 논리 연산자 사용 : " + !flag3);
//연산에 결과가 어떻게 되지 --->> 확인해봐야지 --->> 로깅 한다.
System.out.println("flag3 : " + flag3);
//부정한 순간만 바뀔뿐 원래 값의 결과가 바뀌진 않는다
}
}
삼항 연산자(조건 연산자)
조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
if (조건문)을 간단히 표현할 때 사용 할 수 있음
자바 실습!
package ch03;
import java.net.MulticastSocket;
//import = 수입하다, 가지고 오다
import java.util.Scanner;
/**
* 삼향 연산자(조건 연산자)
* int num = 조건식 ? 결과1 : 결과2
*
*/
public class Operation8 {
public static void main(String[] args) {
System.out.println("입력 받은 두 수 중에 큰 수를 출력 하세요");
//자바 특징 --> 풍부한 라이브러리를 지원 한다.
//JDK --> 표준 라이브러리(자바 개발자들이 만들어놓은 기능, 도구)를 사용해보자.
//데이터 타입( 특징 : )
//콘솔창에서 사용자가 키보드로 입력한 값을 받아 주는 녀석
Scanner sc = new Scanner(System.in);
int x = sc.nextInt(); //사용자가 입력한 정수값을 받아 주는 녀석
System.out.println("x 의 받은 값은 : " + x);
int y = sc.nextInt();
System.out.println("y의 받은 값은 : " + y);
System.out.println("------------------------------------");
//조건식 ? 결과 1 : 결과2;
int max = x > y ? x : y;
System.out.println("두 수 중에 큰 수는 " + max + "입니다");
//자원 닫기
sc.close();
}
}
package ch03;
import java.net.MulticastSocket;
//import = 수입하다, 가지고 오다
import java.util.Scanner;
public class Operation8_1 {
public static void main(String[] args) {
System.out.println("작은 수를 구하시오");
Scanner sc = new Scanner(System.in);
double x = sc.nextDouble();
System.out.println("x 의 값은 : " + x);
double y = sc.nextDouble();
System.out.println("y 의 값은 : " + y);
double T = x > y ? x : y;
System.out.println("두 수 중에 큰 수는 " + T + "입니다" );
}
}
연산자 우선순위
● 가장 높은 순위 연산자는 ( ) [ ] .
● 가장 낮은 순위 연산자 =
연산자 연습문제!!
package basic.exercise;
public class OperatorPractice {
public static void main(String[] args) {
// 1. intData와 doubleData을 덧셈 연산 하여 result1 변수에 담고
// 결과값 30.5를 출력 하세요.
int intData = 10;
double doubleData = 20.5;
// result1 변수명으로 사용
double result1 = intData + doubleData;
System.out.println(result1);
// 2. result1 변수를 정수형으로 강제 형 변환 해서 출력하세요
System.out.println((int)result1);
// 3. intData 변수에서 -1을 뺀 후 출력하세요
// 단, 단항 연산자 사용
System.out.println(--intData);
// 4. doubleData 변수에 값을 -20.5로 출력 하세요
// 단, doubleData 값을 변경하지 마세요
System.out.println(-doubleData);
// 5. 변수 intData 와 doubleData, 관계 연산자를 사용해서
// result2 변수에 값을 true 담기도록 식을 만들고 만들고 출력하세요
int num1 = 10;
int num2 = 30;
boolean result2 = num1 < num2;
System.out.println(result2);
// 6. 변수 result3 을 선언하고 num1과 num2 변수가 합이
// 숫자 50보다 큰지 비교 연산자를 사용해서 결과를 담고 출력하세요
boolean result3 = 50 < (num1 + num2);
System.out.println(result3);
// 7. num1과 num2 값 중 큰 수를 삼항 연산자를 사용해서
// max 변수에 값을 담고 출력해주세요
double max = num1 > num2 ? num1 : num2;
System.out.println("두 수 중에 더 큰 수는? " + max + "입니다");
}
}
'Java' 카테고리의 다른 글
반복문 (for) (0) | 2024.04.11 |
---|---|
조건문 if(만약...이라면) (0) | 2024.04.11 |
CMD명령어를 통한 컴파일, 실행 방법 (0) | 2024.04.09 |
형 변환(type casting) (0) | 2024.04.09 |
상수(constant) (1) | 2024.04.09 |