JAVA 기초(3) - 연산자

이정민·2021년 10월 9일
0

1. 연산자 (Java의 정석 개인요약):


1. 연산자(Operator)

어떠한 기능을 수행하는 기호 (+, -, *, / 등)

2. 피연산자(Operand)

연산자의 작업 대상(변수, 상수, 리터럴, 수식)



2. 연산자 종류와 특징

1. 증감연산자 ( -, ++, -- )

전위형j = ++i;++i;
j=i;
값이 참조되기 전에 증가시킨다.
후위형j = i++;j = i;
i++;
값이 참조된 후에 증가시킨다.

ex)
int i = 5;
int j = 0;

전위형 : j = ++i;
i값을 가지고 오기전에 1을 더하고 나서 대입을 한다.
결과 = int j -> 6

후위형 : j = i++;
i값 5를 대입하고 나서 i값은 1이 더해져서 6이 저장된다.
결과 = int j -> 5

1. 주의해야 할 점

1. 증감연산자는 독립적으로 사용될 때는 똑같이 값을 1증가 시킨다.
2. 수식에 포함되어있을 때만 달라진다.


2. 이항연산자

  1. 이항연산자는 연산을 수행하기 전에 피연산자의 타입을 일치시킨다.

  2. int보다 크기가 작은 타입은 int로 변환한다.( byte, char, short  -->  int )변수의 크기 링크
    byte  +  short  -->  int  +  int  -->  int
    char  +  int  -->  int  +  int  -->  int

  1. 피연산자 중 표현범위가 큰 타입으로 형변환 한다.
    float  +  int  -->  float  +  float  -->  float
    long  +  float  -->  float  +  float  -->  float
    flaot  +  double  -->  double  +  double  -->  double

ex) --------------------------------

byte a = 10;
byte b = 20;
byte c = a + b;

byte a + byte b--> int a + int b (자동 형변환)
byte c = int a + int b; <--- error가 난다. (계산된 값이 int인데 byte에 넣으려고 해서)
byte c = (byte)a + b; <--- 마찬가지로 한개만 byte로 변환시키면 int로 자동 변환되기 때문에 error가 생긴다.

byte c = (byte)(a + b); <--- OK!!


ex) --------------------------------

int a = 1000000;    // 1,000,000
int b = 2000000;    // 2,000,000
long c = a * b;    // c 는 2,000,000,000,000 ?
                                 c 는 -1454759936   Overflow !!

long c = (long)a * b; <--- 한개만 long으로 변환시키면 자동으로 나머지도 long으로 변환되서 계산 된다.
long a * int b -> long a * long b -> long <--- OK!!

long c = a * bL; <--- 대문자 L을 뒤에 붙여도 long으로 변환가능하다.



Math.round() : 소수점 첫째자리에서 반올림한 값을 반환

float pi = 3.141592f;
float shortPi = Math.round(pi * 1000) / 1000f;
Math.round(3.141592f * 1000) / 1000f;
Math.round(3141.592f) / 1000f;
3142 / 1000f; ---> 3142는 int지만 float로 자동 변환 되어서 계산됨
3142.0f / 1000f
3.142f



3. 나머지 연산자 %

  1. 나누기한 나머지를 반환한다.
  2. 홀수, 짝수 등 배수검사에 주로 사용.

int share = 10 / 8;    --    몫
int remain = 10 % 8;    --    나머지

10 % 8 -> 2
10 % -8 -> 2
-10 % 8 -> -2
-10 % 8 -> -2

나눠지는 수의 왼쪽 수의 부호를 따른다.


4. 쉬프트 연산자 <<, >>, >>>

  1. 2의n승 으로 곱하거나 나눈 결과를 반환
  2. 곱셈, 나눗셈보다 빠르다. (그래프 처리에 주로 이용)

x << n 은 x * 2의n승 과 같다.
x >> n 은 x / 2의n승 과 같다.


5. 비교 연산자 >, <, >=, <=, ==, !=

10.0d == 10.0f -> 10.0d == 10.0d -> true

0.1d == 0.1f -> 0.1d == 0.1d -> false
(float)0.1d == 0.1f -> 0.1f == 0.1f -> true


6. 논리연산자

&&가 ||보다 우선순위가 높다. 같이 사용되는 경우 괄호를 사용하자

  1. && 경우 둘다 true인 경우 true이기 때문에 false가 나올 확률이 높은 쪽을 앞에 배치하면 좋다.
  2. || 경우 둘중 true인 경우 true이기 때문에 true가 나올 확률이 높은 쪽을 앞에 배치하면 좋다.

7. 삼항연산자 ? :

조건식의 연산결과가 true이면 식1의 결과를 반환하고 false이면 식2의 결과를 반환한다.
(조건식) ? 식1 : 식2

int x = -10;
int a = x >= 0 ? x : -x;

profile
안녕하세요.

0개의 댓글