안녕하세요? 이번 시간에는 연산자에 대하여 배워보겠습니다. 연산자는 말 그대로 연산(계산)을 위해 사용하는 기호입니다.
연산자에 들어가기전에 출력문은 배웠으니 입력문을 배우고 가겠습니다.
1. Scanner 클래스
- Scanner은 java.util.Scanner 클래스 이므로 소스 맨 앞줄에 import문에 필요합니다.
import java.util.Scanner
- Scanner은 객체를 생성해서 사용해야 합니다.
Scanner a = new Scanner(System.in);
- Scanner은 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽습니다.
- Scanner 주요 메서드
생성자/메서드 |
설명 |
String next() |
다음 아이템을 찾아 문자열로 반환 |
boolean nextBoolean() |
다음 아이템을 찾아 boolean으로 변환하여 반환 |
byte nextByte() |
다음 아이템을 찾아 byte로 변환하여 반환 |
double nextDouble() |
다음 아이템을 찾아 double로 변환하여 반환 |
float nextFloat() |
다음 아이템을 찾아 float로 변환하여 반환 |
int nextInt() |
다음 아이템을 찾아 int로 변환하여 반환 |
long nextLong() |
다음 아이템을 찾아 long으로 변환하여 반환 |
short nextShort() |
다음 아이템을 찾아 short로 변환하여 반환 |
String nextLine() |
한 라인 전체(‘\n’ 포함)를 문자열 타입으로 반환 |
<Scanner 예제코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.util.Scanner; public class ScannerExam { public static void main(String args[]) { System.out.println("이름, 주소, 나이, 신장을 빈칸으로 분리하여 순서대로 입력하세요"); Scanner a = new Scanner(System.in); // Scanner 'a'라는 객체 생상(a는 자기가 짓고싶은데로) String name = a.next(); // 다음 입력문을 문자열로 반환 String addr = a.next(); // 다음 입력문을 문자열로 반환 int age = a.nextInt(); // 다음 입력문을 int로 반환 double weight = a.nextDouble(); //다음 입력문을 double System.out.println("========================="); System.out.println("당신의 이름은 " + name + "입니다."); System.out.println("당신의 주소는 " + addr + "입니다."); System.out.println("당신의 나이는 " + age + "세 입니다."); System.out.println("당신의 몸무게는 " +weight+ "kg 입니다."); } } | cs |
<결과>
※참고 : 입력하는칸은 콘솔에 입력합니다. <결과>에서 파랑색쪽
2. 연산자의 우선순위와 종류
① 피 연산자의 개수에 따른 연산자의 종류
- 단항연산자 : 피 연산자가 1개인 연산자
- 이항 연산자 : 피 연산자가 2개인 연산자
- 삼항 연산자 : 피 연산자가 3개인 연산자
※참고 : 피 연산자란 연산에 참여하는 변수나 상수
② 용도에 따른 연산자 우선 순위
종류 |
연산자 |
최우선 |
( ), [ ] |
단항 연산자 |
++, --, +, -, (type), !, ~ |
산술 연산자 |
%, /, *, +, - |
시프트 연산자 |
>>, <<, >>> |
관계 연산자 |
<, <=, >, >=, ==, != |
논리 연산자 |
&, ^, |, ~, &&, || |
삼항 연산자 |
? : |
대입 연산자 |
=, +=, -=, *=, %=, /=, >>=, <<= |
콤마 연산자 |
, |
③ 최우선 연산자
- ( ) : 우선순위 변경을 위해사용
- [ ] : 배열의 크기나 첨자를 나타낼 때 사용
④ 단항(Unary) 연산자
- ~ : 1의 보수를 구해주는 연산자.
- 양수의 1의 보수의 부호는 음수가 되고 절대값 1증가
- 음수의 1의 보수의 부호는 양수가 되고 절대값 1감소
- ! : NOT(true -> false, false -> true)
- 부호 +, - : '+'는 형식적으로 제공, '-'는 2의보수 연산자 or 부호바꿈연산자
- 증감연산자 ++, -- : 일반적으로 단항연산자는 피 연산자의 왼쪽에 위치하지만 증감연산자는 왼쪽, 오른쪽 둘다 가능.
- ++ : 피 연산자 1증가
- -- : 피 연산자 1감소
- 증감연산자의 위치에 따라 연산결과가 달라질 수 있습니다.
<최우선 연산자, 단항 연산자 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Unary { public static void main(String args[]) { int a = 10, b = -10; boolean c = true, d = false; System.out.println("a= " + a + "\t b=" + b + "\t c=" + c + "\t d=" + d); System.out.println("~a=" + ~a); // -11 1의 보수 연산(양수-> 음수 부호가 바뀌고 1증가됨) System.out.println("~b=" + ~b); // 9 음수-> 양수 부호가 바뀌고 1감소됨 System.out.println("!c=" + (!c) + "\t !d = " + (!d)); // true -> false, false -> true System.out.println("+a=" + (+a) + "\t +b = " + (+b)); // '+'는 형식적 제공 System.out.println("-a= " + (-a) + "\t -b = " + (-b)); // '-'는 2의보수 연산자 or 부호바꿈연산자 } } | cs |
<결과>
<증감 연산자 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class Fix1 { public static void main(String args[]) { int a = 10, b = 5; System.out.println("a = " + a +"\t b = " + b); ++a; --b; System.out.println("a = " + a +"\t b = " + b); a++; b--; System.out.println("a = " + a +"\t b = " + b); // 증감을 하기 전에 명령문을 먼저 처리하므로 10 출력 System.out.println("후위 연산 a = " + a++); // 명령문이 처리후 증감한 a값 확인 System.out.println("a 증가 = " + a); // 증감을 한 후에 명령문을 처리하므로 11 출력 System.out.println("전위 연산 a = " + ++a); } } | cs |
<결과>
⑤ 산술연산자
- (+, -, *, /), 나머지 연산자( % )는 두 개의 피연산자를 가지는 이항연산자이며 산술 연산자는 피 연산자의 크기가 4byte보다 작으면 4byte(int형)로 변환한 다음에 연산을 수행
- 연산하기 전에 데이터형 일치시키기 (둘 중 더 큰 자료형으로)
- 정수와 정수 나눗셈시 정수로 나와야 하므로 소수는 버려지고 정수만 출력 된다.
<산술 연산자 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Error { public static void main(String args[]) { byte a = 10; byte b = 20; //byte c = a + b; 일경우 a, b 모두 int 형으로 변환 되어 연산 되기 때문에 에러 발생. byte c = (byte)(a + b); // 형변환을 통해 byte 데이터 타입으로 바꿔주고 계산해야 한다. System.out.println(c); } } | cs |
<결과>
⑥ Shift 연산자 (<< , >> , >>>)
- 정수형데이터에서만 사용가능하고 2진수로 표현했을때 각 자리를 오른쪽 또는 왼쪽으로 이동
- 오른쪽으로 n비트 이동하면 피연산자를 2의 n승으로 나눈 것과 같은 결과이다.
- '<<' 연산자의 경우, 피연산자의 부호에 상관없이 자리를 왼쪽으로 이동시킵니다.
- '>>' 연산자는 음수인 경우 부호를 유지시켜주기 위해서 빈자리를 1로 채웁니다.
- '>>>' 연산자는 부호에 상관없이 항상 0으로 빈자리를 채워줍니다.
<shift 연산자 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class Shift { public static void main(String args[]) { int temp; System.out.println(-8); System.out.println(Integer.toBinaryString(-8)); temp = -8 <<2; System.out.println("-8 << 2 = " + temp); System.out.println(Integer.toBinaryString(temp)); System.out.println(-8); System.out.println(Integer.toBinaryString(-8)); temp = -8 >> 2; System.out.println( "-8 >> 2 = " + temp); System.out.println(Integer.toBinaryString(temp)); System.out.println(-8); System.out.println(Integer.toBinaryString(-8)); temp = -8 >>> 2; System.out.println( "-8 >>> 2 = " + temp); System.out.println(Integer.toBinaryString(temp)); } } | cs |
<결과>
⑦ 관계 연산자
- 이항 연산자로 피 연산자의 크기를 비교하는 연산자
- 연산의 결과는 true or false
- <, >, <=, >= : 두 피 연산자의 크기를 비교(boolean형을 제외한 나머지 자료형 사용가능)
- ==, != : 두 피연산자의 값이 같은지 비교
⑧ 논리 연산자
- 논리연산자는 이항 연산자로 조건의 참, 거짓을 비교하는 조건 논리 연산자와 비트 논리 연산자로 나뉜다
- 조건 논리 연산자 ( ||, && ) : boolean형의 값을 결과로 하는 조건식만 허용 (조건문, 반복문에서 많이 사용된다.)
- '||'은 OR 결합이고 '&&'은 AND결합이다.
- 비트 논리 연산자 ( |, &, ^, ~) : 피연사자끼리 이진 비트 연산을 수행해서 결과를 정수로 반환하는 연산자( 정수형만 사용가능)
- '|'은 OR연산자, '&'은 AND연산자, '^'은 XOR연산자, '~'은 NOT연산자이다.
- AND, OR, XOR진리표
a |
b |
AND |
OR |
XOR |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
<논리 연산자 예제>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class Bit { public static void main(String args[]) { boolean pan; int x = 3; int y = 5; pan = 10 > 3 && 3 < 10; // (10 > 3 = true) AND (3 < 10 = true) = true System.out.println("pan:" + pan); pan = 10 > 3 || 3 < 10; // (10 > 3 = true) OR (3 < 10 = true) = true System.out.println("pan:" + pan); System.out.println("x는 " + x + "이고, y는 " + y + "일때, "); System.out.println("x | y = " + (x | y)); // ( 11 과 101 OR연산) System.out.println("x & y = " + (x & y)); // ( 11 과 101 AND연산) System.out.println("x ^ y = " + (x ^ y)); // ( 11 과 101 XOR연산) System.out.println("~x = " + ~x); // ( 11 NOT) System.out.println("true | false = " + (true | false)); System.out.println("true & false = " + (true | false)); System.out.println("true ^ false = " + (true ^ false)); } } | cs |
<결과>
⑨ 삼항연산자
- 삼항 연산자는 조건 연산자라고도 하며 3개의 피연산자를 필요로 하게 되는데 첫 번째 피연산자는 조건이며 두 번째 피연산자는 조건이 true일 때 반환 값 세 번째 피연산자는 조건이 false일 때 반환 값입니다.
- 기본형식 : 조건식? 식1:식2
⑩ 대입연산자
- 대입 연산자는 변수에 값 또는 수식의 연산결과를 저장하는데 사용됩니다.
- EX) x = y = 3일때 y = 3이 진행후 x= y가 수행된다.
- 대입연사자는 다른연산자와 결합하여 사용할 수 있다.
EX) i = i + 3 ---------------> i += 3
- 지금까지 연산자의 대해 알아보았습니다. 다음 시간에는 제어문에 대해 알아보겠습니다.
'조재연의 Java 개꿀떡 > 조재연의 Java 기초 개꿀떡' 카테고리의 다른 글
자바(Java)의 기초 박살내기 - 객체지향(클래스)의 기본 개념 (0) | 2017.07.02 |
---|---|
자바(Java)의 기초 박살내기 - 제어문(Control Statement) (0) | 2017.06.30 |
자바(Java)의 기초 박살내기 - 데이터 타입(Data Type) (0) | 2017.06.29 |
자바(Java)의 기초 박살내기 - 이클립스(Eclipse) 단축키 (0) | 2017.06.29 |
자바(Java)의 기초 박살내기 - Java의 개요 (0) | 2017.06.28 |