Java

연산자에 관하여

H_u 2024. 4. 9. 16:40
728x90
반응형
SMALL

항(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 + "입니다");

 

}

}

728x90
반응형
SMALL

'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