[JAVA]연산자

Hyeok·2022년 10월 17일
2

JAVA

목록 보기
6/10
post-thumbnail

🔎오늘의 목표

  1. 연산자와 피연산자
  2. 연산자의 종류
  3. 연산자의 우선순위
  4. 연산자의 결합규칙
  5. 증감 연산자 ++과 --
  6. 부호 연산자
  7. 형변환 연산자
  8. 자동 형변환
  9. 사칙 연산자

1.🔎 연산자와 피연산자

연산자는 '연산을 수행하는 기호'를 말한다.
EX) X + 3 을 보면 (+,-,*,/) 이것을 우리는 연산자라고 부르며
보기에 X 와 3 은 피연산자라고 부른다.

2.🔎 연산자의 종류

종류연산자설 명
산술 연산자+ , - , * , / , % , << ,>>사칙 연산과 나머지 연산(%)
비교 연산자> , < , >= , <= , == !=크고 작음과 같고 다름을 비교
논리 연산자&& ,\\ , ! , & , \ ,^ , ~'그리고(AND)와 '또는(OR)'으로 조건을 연결
대입 연산자=우변의 값을 좌변에 저장
기타(type) ? : instanceof형변환 연산자, 삼향 연산자, instanceof연산자

위에 표는 기본적으로 알아야하는 연산자이며
피연산자의 개수로 연사자를 분류하기도 한다, 피연산자의 개수가 하나면
👌'단항 연산자' 👌두개면 '이항 연산자 ' , 👌세 개면 '삼항 연산자'라고 부른다.
대부분의 연산자는 '이항 연산자'이다.

3.🔎연산자의 우선순위

식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정된다. 곱셈과 나눗셈(* , /)은 덧셈과 뺄셈(+,-) 보다 우선순위가 높다는 것은
우리가 이미 수학에서 알고있는 부분이다

설명
-x + 3단항 연산자가 이항 연산자보다 우선순위가 높습니다. 그래서 x의 부호를 바꾼 다음 덧셈이 수행 됩니다. 여기서 '-'는 뺄셈 연산자가 아니라 부호 연산자 입니다.
x + 3 * y곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다. 그래서 '3 * y' 가 먼저 계산된다.
x + 3 > y - 2비교 연산자 (>) 보다 산술 연산자 '+'와 '-'가 먼저 수행된다. 그래서 'x + 3'과 'y -2 '가 먼저 계산된다. 그리고 다음에 '>'가 수행된다.
x > 3 && x < 5논리 &&(연산자)보다 비교 연산자가 먼저 수행된다.
result = x + y * 3;대입 연산자는 연산자 중에서 제일 우선순위가 낮다.

4.🔎연산자의 결합규칙

우선순위가 같다고 해서 아무거나 먼저 처리하는 것은 아니고 나름대로의 규칙을 가지고 있다. 그 규칙에대해서 알아보자

  • 예를 들어보자
  1. 3 + 4 - 5 라는 식이 있다고 생각해보자
    이런 수식의 결합방향은 왼쪽에서 오른쪽으로 진행된다.

  2. x = y = 3
    대입 연산자는 연산자의 결합규칙이 오른쪽에서 왼쪽이므로
    오른쪽 부터 왼쪽으로 시작된다.

    이걸 정리하면

    1. 산술>비교>논리>대입 대입은 제일 마지막에 수행된다.
    2. 단항(1) > 이항(2) > 삼항(3) 단항 연산자의 우선순위가 이항 연산자보다 높다.
    3. 단항연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

    4-1 Ex1)

    class Ex3_1 {
    	public static void main(String[] args) {
      int x, y; 
      
      x = y = 3; 
      System.out.println("x="+ x);
      System.out.println("y="+ y);
      
      }
     } 

    5.🔎증감 연산자 ++과 --

    증감 연산자는 피연산자에 저장된 값을 1증가 또는 감소시킨다. 증감 연산자의 피연산자로 정수와 실수 모두 가능하지만, 상수는 값을 변경할 수 없으므로 불가능하다.

    • 증가 연산자(++) : 피연산자 값을 1 증가
    • 감소 연산자(--) : 피연산자의 값을 1 감소

Ex5-1


public class Ex3_2 {

	public static void main(String[] args) {
	int i = 5 , j = 0;
	
	
	j = i++;  //후위형
	System.out.println("j=i++ 실행후, i ="+ i +",j ="+j);
	
	i=5;
	j=0;
	
	j = ++i;  //전위형 
	System.out.println("j=++i; 실행후  ,i="+i+",j="+j);

	}

}
  • 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다.

6.🔎부호 연산자

부호 연산자 '-'는 피연산자의 부호를 반대로 변경한 결과를 반환한다.
부호 연산자 +는 하는 일이 없으며, 쓰이는 경우도 거의 없다.
부호 연사자는 boolean형과 char형을 제외한 기본형에만 사용 할 수 있다.

Ex6-1


public class Ex3_4 {

	public static void main(String[] args) {
		
		int i = -10;
		i = +i;
		
		System.out.println(i);
		
		i = -10;
		i = -i;
		System.out.println(i);

	}

}

7.🔎형변환 연산자

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다.

  • 형태: (타입)피연산자

    여기서 사용되는 괄호()는 '캐스트 연산자' or '형변환 연산자라고 부른다

예를들어 다음과 같은 코드가 있을 때

double a = 89.4
int score = (int)a;

  • int score -> (int)a; -> int score = (int)89.4; -> int score = 89;
    이런식으로 변환한다고 생각하면 된다.
변환수식결과
int -> char(char)65'A'
char -> int(int)'A'65
float -> int(int)1.6f1
int -> float(float)1010.0f
  • 위에 그림은 형변환의 다양한 예시를 표로 작성해 봤다.

Ex7-1


public class Ex3_5 {

	public static void main(String[] args) {
		
		double d = 85.4;
		int score = (int) d;
		System.out.println("score=" + score);
		System.out.println("d=" + d);
		
		
	}

}

8.🔎자동 형변환

서로 다른 타입 간의 대입이나 연산을 할 때, 먼저 형변환으로 타입을 일치시키는 것이
원칙이다 but, 경우에 따라 편의상의 이유로 형변환을 생략할 수 있다.
그렇다고 안하는 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가해준다.

  • 몇가지 예시를 들어보자
flaot f = 1234; //  float f = (float)1234;에서 (float)가 생략되었다.

* 위의 문장에서 우변은 int 타입의 상수이고, 이 값을 저장하려는 변수의 타입은
float 이다 , 서로 타입이 달라서 형변환이 필요하지만 편의상 생략 하였다.
float 타입의 변수는 1234라는 값을 저장하는데 아무런 문제가 없기 때문이다.
그러나 , 다음과 같이 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는
경우에는 형변환을 생략하면 에러가 발생한다.

byte b =1000; // 에러이다. 그 이유는 byte타입의 범위는 (-128~127)이다.

위처럼 "기존의 값을 최대한 보존 할 수 있는 타입으로 자동 형변환된다."

  • 그럼 타입마다 크기를 알아보자
byte (1byte) ->short , char (2byte) ->int (4byte) ->long (8byte) ->float (4byte) ->double (8byte)

7개의 기본형을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열한 것이다.

9.🔎사칙 연산자

사칙 연산자 , 아마도 프로그래밍에서 가장 많이 사용되는 연산자들 일 것이다.
우리가 흔히 알고있는 사칙연산을 가르키며 곱셈(*), 나눗셈(/), 나머지(%) ,덧셈(+) , 뺼셈(-) 연산자보다 우선순위가 높으므로 먼저 처리된다.

Ex9-1


public class Ex3_6 {

	public static void main(String[] args) {
		
		
		int a = 10;
		int b = 4;
		
		System.out.printf("%d + %d = %d%n", a , b , a+b);
		System.out.printf("%d - %d = %d%n", a , b , a-b);
		System.out.printf("%d * %d = %d%n", a , b , a*b);
		System.out.printf("%d / %d = %d%n", a , b , a/b);
		System.out.printf("%d / %f = %f%n", a ,(float)b , a/(float)b);

	}

}

위처럼 사칙 연산자를 이용하여 다양한 결과 값을 얻을 수 있다
일반적으로는 타입이 같은 경우 같은 결과 값도 같은 타입을 얻으며
만약 int/float를 한다고 가정했을 때 좀 더 범위가 큰 float형으로
일치시키고 연산을 수행한다. 잘 알아두자.

profile
안녕하세요.

0개의 댓글

관련 채용 정보