Java 스터디 3일차

프로그래밍/Java

2018. 10. 17. 19:09

반응형

※이 글은 2018/08/05 ~ 2018/08/27일까지 했던 자바 스터디 노트를 올려놓은 겁니다.※

03-1 기본 연산자
 
항과 연산자
연산자(operator) : 연산에 사용하는 기호
(operand) : 연산에 사용하는 
 

연산자
설명
연산 
단항 연산자
항이  개인 연산자
++num
이항 연산자
항이  개인 연산자
num1 + num2;
삼항 연산자
항이  개인 연산자
(5 > 3) ? 1 : 0;

 
프로그램에서의 연산자 우선순위
단항 연산자
이항 연산자
삼항 연산자
 
대입 연산자
대입 연산자 (assignment operator)
변수에 값을 대입하는 연산자
대입 연산자는 이항 연산자  우선순위가 가장 낮은 연산자이다.
,  문장에 여러 연산자가 있을  모든 연산을  끝낸 
마지막에 연산 결과를 변수에 대입한다는 것입니다.
 
 
대입 연산자를 간단히 표현하면
왼쪽 변수 = 오른쪽 변수(또는 )
 같습니다.

int age = 24; //나이를 의미하는 age 변수에 값 24를 대입함 totalScore = mathScore + engScore; // 1. mathScore 값과 engScore 값을 더하여 // 2. 총점을 의미하는 totalScore 변수에 대입한다.

부호 연산자
부호 연산자는 +, - 두가지가 있습니다.
이항 연산자이면서 부호를 나타내는 단항 연산자로도 사용합니다.

연산자
기능
연산 
+
변수나 상수 값을 양수로 만듭니다.
+3

변수나 상수 값을 음수로 만듭니다.
-3

 

그런데 변수에 - 연산자만 사용한다고 해서  자체가 음수로 바뀌는 것은 아닙니다.

int num = 10; System.out.println(+num) // 값 10이 그대로 출력 System.out.println(-num) // 값 10에 -가 붙어서 -10이 출력되지만 num 값이 실제로 바뀌지 않음 System.out.println(num) // 값 10이 그대로 출력 num = -num; // num 값을 수로 바꿔서 다시 num에 대입 System.out.println(num); // 값 -10이 출력됨

 코드처럼  자체를 음수로 바꾸려면 = 연산자 (대입 연산자) 사용하여야 합니다.
 
산술 연산자
사칙 연산에서 사용하는 연산자가 산술 연산자입니다.

연산자
기능
연산 
+
 항을 더합니다.
5 + 3

앞에 있는 항에서 뒤에 있는 항을 뺍니다
5 - 3

 항을 곱합니다.
5 * 3
/
앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다.
5 / 3
%
앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구합니다.
5 % 3

 
산술 연산자의 우선순위
산술 연산자의 우선순위는 일반 수학의 산술 연산과 같습니다.
 

산술 연산자를 사용하여 총점과 평균 구하기

package chapter2; public class chapter2 { public static void main(String[] args) { int mathScore = 90; int engScore = 70; int totalScore = mathScore + engScore; System.out.println(totalScore); double avgScore = totalScore / 2.0; System.out.println(avgScore); } }

증감, 감소 연산자

연산자
기능
연산 
++
항의 값에 1 더합니다.
val = ++num; , val num++;
--
항의 값에서 1 뺍니다.
val = --num; , val = num--;

증감, 감소 연산자는 자주 사용하는 연산자이므로  익혀야 한다.
 
연산자를 피연산자 앞에 쓸때랑, 뒤에 쓸때.  결과값이 전혀 다르므로 주의 해야 합니다.
 

증가, 감소 연산자를 사용하여  연사하기

package chapter2; public class chapter2 { public static void main(String[] args) { int gameScore = 150; int lastScore1 = ++gameScore; System.out.println(lastScore1); int lastScore2 = --gameScore; System.out.println(lastScore2); } }

증감, 감소 연산자의 위치
증감, 감소 연산자의 기능을   이해하려면 프로그램에서
문장의 의미를 알아 두는 것이 중요하다.
 
증감, 감소 연산자가 피연사자 앞에 있으면 문장이 끝나기 전에 피연산자 값이 증가하거나 감소합니다.
반대로, 피연산자 뒤에 있으면 문장이 끝난 후에 피연산자 값이 증가하거나 감소합니다.
 
관계 연산자
관계 연산자는 항이  개인 이항 연산자입니다.
 개의   어느 것이 큰지, 작은지, 같은지 등의 여부를 검사합니다.

연산자
기능
연산 
>
왼쪽 항이 크면 참을, 아니면 거짓을 반환합니다.
num > 3;
<
왼쪽 항이 작으면 , 아니면 거짓을 반환합니다.
num < 3;
>=
왼쪽 항이 오른쪽 항보다 크거나 같으면 , 아니면 거짓을 반환합니다.
num >= 3;
<=
왼쪽 항이 오른쪽 항보다 작거나 같으면 , 아니면 거짓을 반환합니다.
num <= 3;
==
  항의 값이 같으면 , 아니면 거짓을 반환합니다.
num == 3;
!=
  항이 다르면 , 아니면 거짓을 반환합니다.
num != 3;

 
논리 연산자
논리 연산자는 중학교  배웠던 명제라고 생각하면 됩니다.
논리 연산자가 관계 연산자 보다 우선순위가 낮으므로, 관계 연산자의 결과 값을
기반으로 논리 연산자의 결과 값을 계산합니다.

연산자
기능
연산 
&&
(논리 )
 항이 모두 참인 경우에만 결과 값이 참입니다.
그렇지 않은 경우는 거짓입니다.
boolean val =
(5 > 3) && (5 > 2);
||
(논리 )
   하나의 항만 참이면 결과 값은 참입니다.
 항이 모두 거짓이면 결과 값은 거짓입니다.
boolean val =
(5 > 3) || (5 < 2);
!
(부정)
단항 연산자입니다. 참인 경우는 거짓으로 바뀌고,
거짓인 경우는 참으로 바꿉니다.
boolean val = !(5 > 3);

 
논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가

단란 회로 평가 실습하기

package chapter2; public class chapter2 { public static void main(String[] args) { int num1 = 10; int i =2; boolean value = ((num1 = num1 + 10) < 10) && ((i = i +2) < 10); System.out.println(value); System.out.println(num1); System.out.println(i); value = ((num1 = num1 + 10 ) > 10) || ((i = i + 2) < 10); System.out.println(value); System.out.println(num1); System.out.println(i); } }

복합 대입 연산자
복합 대입 연산자란 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자.
비트 연산자와 함께 사용하면 코드가 간결 해진다.

연산자
기능
연산 
+=
 항의 값을 더해서 왼족 항에 대입합니다.
num1 += 2;
num1 = num1 = 2; 같음
-=
왼쪽 항에서 오른쪽 항을 빼서  값을 왼쪽 항에 대입합니다.
num1 -= 2;
num1 = num1 -2; 같음
*=
 항의 값을 곱해서 왼쪽 항에 대입합니다.
num1 -= 2;
num1 = num1 * 2; 같음
/=
왼쪽 항을 오른쪽 항으로 나누어  몫을 왼쪽 항에 대입합니다.
num1 /= 2;
num1 = num1 / 2; 같음
%=
왼쪽 항을 오른쪽 항으로 나누어  나머지를 왼쪽 항에 대입합니다.
num1 %= 2;
num1 = num1 % 2 같음
<<=
비트를 왼쪽으로 이동하고  값을 왼쪽 항에 대입합니다.
num1 <<= 2;
num1 = num1 << 2; 같음
>>=
비트를 오른쪽으로 이동하고  값을 왼쪽 항에 대입합니다.
(왼쪽에 채워지는 비트 값은 부호 비트와 동일합니다.)
num1 >>= 2;
num1 = num1 >> 2; 같음
>>>=
비트를 오른쪽으로 이동하고  값을 왼쪽 항에 대입합니다.
(왼쪽에 채워지는 비트 값은 0입니다.)
num1 >>>= 2;
num1 = num1 >>> 2; 같음
&=
 항의 & 비트 연산   값을 왼쪽 항에 대입합니다.
num1 &= num2;
num1 = num1 & num2; 같음
|=
 항의 | 비트 연산   값을 왼쪽 항에 대입합니다.
num1 |= num2;
num1 = num1 | num2; 같음
^=
 항의 ^ 비트 연산   값을 왼쪽 항에 대입합니다.
num1 ^= num2;
num1 = num1 ^ num2;
 같음

비트 연산자는 '03-2 비 연산자'에서 배웁니다.

조건 연산자
조건 연산자는 연산에 필요한 항의 개수가  개입니다. 그래서 삼항 연산자라고 합니다.

연산자
기능
연산 
조건식 ? 결과 1 : 결과 2;
조건식이 참이면 결과1, 조건식이
거짓이면 결과 2 선택됩니다.
int num = (5>3) ? 10 : 20;

 연산 예에서 5 3보다 크므로 조건식이 참입니다. 따라서 num값은 10 됩니다.
 

조건 연산자를 사용하여 부모님의 나이 비교하기

package chapter2; public class chapter2 { public static void main(String[] args) { int fatherAge = 45; int motherAge = 47; char ch; ch = (fatherAge > motherAge) ? 'T' : 'F'; System.out.println(ch); } }

03-2 비트 연산자
 
비트 논리 연산자
비트 단위로 &, |, ^, ~ 연산이 이루어집니다.
 
& 연산자
&(AND)연산자는  개의 비트 값이 모두 1 경우에만 연산의 결과 값이 1 .
 
| 연산자
|(OR) 연산자는 비트 값이 하나라도 1이면 연산 결과 값이 1 됩니다.
 
^ 연산자
^(XOR) 연산자는 같은 값이면 0, 다른 값이면 1 결과 값을 갖습니다.
 
~ 연산자
~(반전) 연산자는 비트 값을 0 1, 1 0으로 바꾸는 연산자 입니다.
 
비트 이동 연산자
<< 연산자
<< 시프트 연산자는 왼쪽으로 비트를 이동하는 연산자입니다.
 
>> 연산자
>> 시프트 연산자는 오른쪽으로 비트를 이동하는 연산자입니다.
 
>>> 연산자
>>> 시프트 연산자는 >> 연산과 동일하게 비트를 오른쪽으로 이동합니다.
차이점은 왼쪽에 채워지는 비트 값이 부호 비트와 상관없이 무조건 0 됩니다.
 

비트 이동 연산자를 사용하여 연산하기

package chapter2; public class chapter2 { public static void main(String[] args) { int fatherAge = 45; int motherAge = 47; char ch; ch = (fatherAge > motherAge) ? 'T' : 'F'; System.out.println(ch); } }


연산자 우선순위
연산자의 일반적인 우선순위는 아래와 같습니다.
단항 연산자가 가장 높고 이항, 삼항 연산자 순서입니다.
대입 연산자의 우선순위가 가장 낮습니다.
산술, 관계, 논리, 대입 연산자 순서로 우선순위를 가지며 ( ) 우선순위가 가장 높습니다.
 

우선순위

연산자
연산방향
1
일차식
( ) [ ] .
->
2
단항
! ++ -- + -
<-
3
산술
% /
->
4
산술
+ -
->
5
비트 이동
<< >>
->
6
관계
< > <= >=
->
7
관계
== !=
->
8
비트 
&
->
9
비트 
^
->
10
비트 
|
->
11
논리 
&&
->
12
논리 
||
->
13
조건
? :
->
14
대입
= += -= *= %= /=
<-

 


반응형

'프로그래밍 > Java' 카테고리의 다른 글

Java 스터디 6일차  (0) 2018.10.21
Java 스터디 5일차  (0) 2018.10.19
Java 스터디 4일차  (0) 2018.10.17
Java 스터디 2일차  (0) 2018.10.14
Java 스터디 1일차  (0) 2018.10.14