[Java] 연산자

2021. 1. 12. 20:13Dev.Program/Java & Spring

728x90

책 p83

< 연산자 >

p.86

======== Ex.java 만들기

< 산술 연산자(+, -, *, /, %) >

  • 일반 사칙연산과 동일
  • % 연산자 : 나머지 연산자(퍼센트 연산자)라고 하며, 나눗셈 결과의 나머지 계산

오류 뜨는 이유 : % 뒤에는 무언가가 와야되는데 안와서! \를 쓸 때 \를 한번 더 적어 주는 것처럼(\\), %도 %를 한번 더 적어준다. (%%)
오류 사라짐
println() 문에서는 문제 없음.

 

< 산술 연산 시 자동 형변환 >

  • 산술 연산 전에 데이터 타입이 다르다면 산술 연산을 수행하기 전 피연산자끼리의 데이터타입을 일치시킨 후 연산 수행
  • 규칙 1. int 타입보다 작은 타입끼리의 연산은 모두 int 타입으로 변환 후 연산 수행

⇒ 따라서, 결과 값이 무조건 int 타입이 됨

     ex) byte + byte = (int)byte + (int)byte 로 변환되어 연산 수행 = 결과가 int 타입

     ex2) char + int = (int)char + int = int

  • 규칙 2. int 타입보다 큰 타입과의 연산은 큰 타입으로 변환 후 연산 수행

ex) int + long = (long)int + long = long

ex2) int + double = (double)int + double = double

 

  • byte + byte = int 이므로 byte 타입 변수에 저장 불가!
  • b3 = (byte)(b1 + b2); 형 변환 시켜줌.

    • 이렇게 오류가 뜰 때 밑에 밑줄 눌러주면

알아서 자동으로 형 변환 시켜줌.
C는 char 타입이라 C가 나오고, 67은 int 타입으로 변환되어 67로 뜸. C=67

 

오류! int + long = long 이므로 int 타입 변수에 저장 불가!
이 값이 실수값으로 나오게 하려면
첫번째 방법 : 근데 이 방법은 잘 안씀.
두번째 방법 : 소숫점을 나타내주면 실수값으로 나온다 &rArr; 실제 많이 사용하는 방법




======== Ex2.java

p.95

< 대입연산자(=) >

  • 우변의 데이터를 좌변의 변수에 대입(저장)

⇒ 연산 방향이 우 → 좌로 진행됨

     ex) x = y = 3 의 경우 y에 3을 대입하고 x 에 y를 대입

  • 모든 연산자 중에서 우선순위가 가장 낮다.

< 확장 대입연산자(복합 대입연산자)(+=, -=, *=, /=, %=) >

  • 대입연산자와 산술연산자를 조합한 연산자
  • 좌변과 우변의 데이터끼리 산술연산을 먼저 수행한 후 결과값을 좌변에 대입

======== Ex3.java

p.96

< 비교 연산자(관계 연산자) (>, >=, <=, <, ==, !=) >

  • 두 피연산자 간의 대소관계 등을 비교하여 true 또는 false 값 리턴

 

======== Ex4.java

p.99

< 논리연산자(&&, ||, !, ^) >

  • 두 피연산자 간의 논리적인 판별을 수행하는 연산자
  • 피연산자는 모두 boolean 타입 데이터만 사용 가능하며, 결과값도 boolean 타입으로 리턴

 

  • AND 연산자(& 또는 &&) - 논리곱
  • 두 피연산자가 모두 true 일 경우에만 결과값이 true 이고, 하나라도 false 일 경우 결과값이 false
  •  F AND F = F, F AND T = F, T AND F = F, T AND T = T
  • OR 연산자(| 또는 ||) - 논리합
  • 두 피연산자 중 하나라도 true 일 경우 결과값이 true 이고, 모두 false 일 경우에만 결과값이 false
  • F OR F = F, F OR T = T, T OR F = T, T OR T = T
  • NOT 연산자(!) - 논리부정
  • 단항 연산자로, 현재 값을 반대로 반전시킴
  •  F → T, T → F
  • XOR 연산자(^) - 배타적 논리합(배타적 OR)
  • 두 피연산자가 서로 다를 때 true, 같을 때 false
  • F XOR F = F, F XOR T = T, T XOR F = T, T XOR T = F0

< 논리 연산자 진리표 >

& T F | T F ^ T F ! T F
T T F T T T T F T   F T
F F F F T F F T F  
논리곱 논리합 배타적 논리합 부정

 

======== Ex5.java

p.102

< 증감연산자(++, --) >

  • 단항연산자
  • 피연산자의 앞 또는 뒤에 붙어서 값을 1만큼 증가 또는 감소시키는 연산자
  • 다른 연산과 결합될 때, 전위연산자와 후위연산자에 따라 다른 결과를 가져옴

 

1. 선행연산자(전위연산자)

  • 피연산자의 앞쪽(좌측)에 붙어서 값을 1 증가 또는 감소시키는데 먼저 피연산자의 값을 증가 또는 감소시킨 후 다른 연산에 참여

ex) ++a, --a

 

2. 후행연산자(후위연산자)

  • 피연산자의 뒷쪽(우측)에 붙어서 값을 1 증가 또는 감소시키는데 피연산자를 먼저 다른 연산에 참여시킨 후 피연산자 값을 1 증가 또는 감소

ex) a++, a--

 

선행, 후행 다른 결과값이 나옴.

 

> 선행

  • x1 의 값을 먼저 1만큼 증가시킨 후, 대입연산자를 통해 x1 값을 y1 에 대입
  • 따라서, x1 이 5 → 6 으로 변경된 후 y1 에 x1 을 저장하므로 y1 도 6이 저장됨 

> 후행

  • x2 의 값을 먼저 y2 에 대입한 후, x2 의 값을 1 만큼 증가시킴
  • 따라서, x2 가 5 일 때 y2 에 대입된 후, x2 의 값을 5 → 6으로 변경

⇒ 차이점 잘 기억하기!!

 

728x90