연산자(Operator)
- 연산을 수행하기 위한 부호나 명령어
- 산술연산은 숫자 데이터의 연산이고 논리연산은 결과가 true 나 false 형태로 리턴되는 연산
1.최우선 연산자
1) ( )
: 연산의 우선순위 변경을 위한 연산자
2) [ ]
: 배열에서 배열의 크기나 인덱스를 설정할 때 사용하는 연산자
2.단항 연산자 : 하나의 데이터만을 가지고 연산하는 연산자 -
1) 증감 연산자: ++, --
- 변수에만 사용할 수 있는 연산자
- 변수의 앞 뒤 모두에 위치 할 수 있는 연산자
- 변수의 앞에 놓이게 되면 변수의 값을 1증감시키고 명령에 사용
- 변수의 뒤에 놓이게 되면 변수의 값을 명령에 사용하고 1증감시킵니다.
- 연속해서 사용되는 경우 언어마다 다르게 적용
int a = 10;
//a의 값을 1증가
a++;
System.out.println("a:" + a); //11 출력
//a가 11인 상태에서 명령에 먼저 사용하고 1증가
//11이 출력되고 a는 12가 됩니다.
System.out.println("a:" + (a++)); //11
//a를 먼저 증가시켜서 13을 만들고 명령에 사용
System.out.println("a:" + (++a));//13
2) 부호 관련 연산자+
: 양수라는 것을 명시적으로 표현하기 위한 연산자-
: 2의 보수 연산자 - 음수 표현~
: 1의 보수(0->1, 1->0) 연산자 - 양수와 음수사이의 절대값 1차이, 색상 반전에 이용
3) 강제 형 변환 연산자(자료형)데이터
: 데이터의 자료형을 강제로 변경하는 연산자
3.산술 연산자
%, *, /, +, -
자바는 동일한 자료형끼리 산술 연산을 하면 동일한 자료형으로 결과가 리턴
정수 / 정수 = 정수
서로 다른 자료형끼리 산술 연산을 하면 표현 범위가 더 큰 자료형으로 변환해서 연산하고 표현 범위가 더 큰 자료형으로 결과를 리턴
정수 + 실수 => 실수 + 실수 = 실수
int 보다 작은 자료형은 int 로 변환해서 수행하고 결과도 최소 int
short + short => int + int = int
문자열은 문자열 또는 숫자, 그리고 boolean 데이터와 + 연산이 가능한데 + 연산을 하게되면 다른 데이터를 문자열로 변환해서 결합
"10+20=" + 10 + 20 => "10+20=1020"
"10+20=" + (10 + 20) => "10+20=30
%
: 나머지 연산자- 숫자의 범위를 제한하거나 패턴을 갖는 문장을 실행할 때 사용
실습)패턴을 갖는 명령문을 실행
//빨강, 파랑, 노랑 을 순서대로 1초마다 출력
int i = 0;
for(;;) {
try {
i = i % 4;
if(i==0)
System.out.println("라투");
else if(i==1)
System.out.println("오미크론");
else if(i==2)
System.out.println("다크스펙터");
else
System.out.println("오미크론");
Thread.sleep(1000);
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
- cd key 나 숫자 코드의 유효성 검사에도 %가 사용됩니다.
4.shift 연산자
정수 데이터를 가지고 왼쪽이나 오른쪽으로 비트 단위로 밀어내는 연산자
2진수로 연산하고 결과는 10진수로 리턴
=> >> , <<, >>>
정수1 >> 정수2
: 정수1을 정수2 비트만큼 오른쪽으로 shift정수1 << 정수2
: 정수1을 정수2 비트만큼 왼쪽으로 shift부호비트는 shift 하지 않습니다.
- 첫번째 비트는 shift 하지 않습니다.
정수1 >>> 정수2
: 부호비트도 shift, 양수 일 때는 >> 와 차이가 없고 음수인 경우 결과가 달라짐
32번 이상 shift 하라고 작성하면 32로 나눈 나머지 만큼만 shift 합니다.
오른쪽으로 한 번 shift 하면 2로 나눈 효과
왼쪽으로 한 번 shift 하면 2를 곱한 효과
4 : 0000 0100
4>>1 : 0000 0010 -> 2
4>>2 : 0000 0001 -> 1
5 / 2 : 0000 0010 -> 2
실습)
int n = 10;
//2번을 오른쪽으로 밀면 나누기 4한 효과 - 2가 출력
System.out.println("n >> 2:" + (n >> 2));
//32번 이상 밀면 모든 비트가 소멸되기 때문에
//32번 이상 shift 하면 32로 나눈 나머지 만큼만 shift - 2번만 함
System.out.println("n >> 34:" + (n >> 34));
5.옵션 설정
프로그래밍 언어에서는 사용할 수 있는 옵션을 정수로 만들어 놓는 경우가 종종 있는데 이 때 숫자의 배열을 확인
숫자의 배열이 1, 2, 3, 4, 5 처럼 일련번호 형태로 되어 있으면 이 옵션은 하나 만 선택
숫자의 배열이 1, 2, 4, 8, 16, 32 처럼 2의 지수 승 형태로 되어 있으면 이 옵션은 중복 선택이 가능한 옵션입니다.
- 애플은 1, 2, 4, 8 이런 식으로 쓰지 않고 1<<0, 1<<1, 1<<2, 1<<3 형태로 만듭니다.
키보드 눌렀을 때
A:65, B:66, C:67...
마우스 왼쪽:1, 마우스 오른쪽: 2, Shift:4, Control:8, Middle Button: 16, Alt: 32...
6.관계 연산자
- 2개의 데이터를 비교해서 결과를 boolean 리턴하는 연산자
- 숫자형에만 사용 가능한 연산자:
>, >=, <, <=
- 모든 자료형에서 사용 가능한 연산자(내용을 비교하는 것이 아니고 가리키고 있는 데이터가 같은지 비교):
!=, ==
- 문자열의 경우는 동일한 데이터이더라도
==
로 비교하면 false가 리턴될 수 있기 때문에 문자열은==
로 비교하지 않습니다.
7.비트 논리 연산자
- 정수 데이터에 사용 가능한 연산자로 비트 단위로 연산한 후 결과를 10진 정수로 리턴하는 연산자
&(and)
: 2개의 비트 모두 1일 때 만 1|(or)
: 2개의 비트 모두 0일 때 만 0^(xor)
: 2개의 비트가 같으면 0 다르면 1- 이 연산자들은 시스템 프로그래밍이나 그래픽 프로그래밍을 할 때 자주 등장
int a = 20;//00000000 00000000 00000000 00010100
int b = 13;//00000000 00000000 00000000 00001101
//2개 모두 1인 경우에만 1
System.out.println("a&b:" + (a&b)); //결과는 100 -> 4
//2개 모두 0인 경우에만 0 나머지 경우는 1
System.out.println("a|b:" + (a|b)); //결과는 11101 -> 29
//2개 같은 경우는 0 다른 경우는 1
System.out.println("a^b:" + (a^b)); //결과는 11001 -> 25
8.조건 논리 연산자
boolean 데이터를 가지고 연산을 수행
!(NOT)
: 하나의 데이터를 가지고 연산하는데 결과를 반대로 리턴하는 연산자&&(AND)
: 둘 다 true 인 경우만 true를 리턴하고 그 이외의 경우는 false 리턴||(OR)
: 둘 다 false 인 경우만 false를 리턴하고 그 이외의 경우는 true 리턴and 와 or는 데이터의 순서를 바꿔도 실행 결과는 같지만 과정은 다를 수 있습니다.
- and는 앞 쪽의 데이터가 false 이면 결과가 무조건 false 이므로 뒤의 데이터를 확인하지 않습니다.
or는 앞 쪽의 데이터가 true이면 결과가 무조건 true 이므로 뒤의 데이터를 확인하지 않습니다.
순서에 따라 뒤의 데이터를 확인해야 하기도 하고 확인하지 않아도 되기 때문에 과정이 달라질 수 있습니다.
반복문 안에서 사용할 때는 조금 생각해보고 사용하는 것이 좋습니다.
실습)
int a = 10;
//a>5 true && a++ > 10
boolean result = a > 5 && (a++ > 10);
System.out.println("결과:" + result);
System.out.println("a:" + a);
//a<5 false
//앞의 문장이 거짓이어서 뒤의 문장을 수행하지 않기 때문에 a의 값은 증가하지 않음
result = a < 5 && (a++ > 10);
System.out.println("결과:" + result);
System.out.println("a:" + a);
연습)
int x = 10;
//x가 4의 배수인지 판별 - 4로 나누어 떨어지면 4의 배수
boolean result = x % 4 == 0;
System.out.println("result:" + result);
int year = 2020;
//윤년인지 판별
//윤년은 4의배수이고 100의 배수가 아닌 경우 또는 400의 배수인 경우
result = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
System.out.println("result:" + result);
9.삼항 연산자
변수 = boolean이 나오는 표현식 ? true일 때 수행할 내용 : false 일 때 수행할 내용;
2개의 정수가 있다고 할 때 2개 중에 큰 정수 찾기
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println("max:" + max);
- 간단한 분기문을 만들 때는 if 대신에 삼항 연산자를 사용합니다.
- 삼항 연산자로 작성하는 모든 식은 if로 대신할 수 있습니다.
10.대입연산자
=
: 오른쪽의 데이터를 왼쪽의 변수에 대입하기 위한 연산자연산자=
: 왼쪽의 변수가 가리키는 데이터에 오른쪽의 데이터를 연산자를 이용해서 연산하고 다시 왼쪽의 변수에 결과를 대입하는 연산
int a = 10;
a += 20; //a의 값인 10 + 20을 하고 그 결과를 다시 a에 저장
//a의 값은 30
//+ 대신에 다른 연산자들도 사용이 가능
11. 변수의 값을 1증가
a = a + 1;
a += 1;
a++;
- 예전에는 a++이 가장 빠르다고 했는데 실제로 비교를 해보면 몇 억번 정도 수행해도 별차이가 없음
a = a + 1 방식은 모든 프로그래밍언어에서 사용이 가능+=
, ++
는 되는 언어가 있고 안되는 언어도 있습니다.
12.연습문제
int second = 309209;
//second에 초가 저장
//하루는 86400 초, 1시간은 3600초, 1분은 60초
//second 가 몇일 몇시간 몇분 몇초인지 출력
int day = second / 86400;
int hour = (second - (day * 86400))/3600;
int minute = (second - (day * 86400) - (hour * 3600))/60;
//초는 분까지 가져간 것을 모두 빼면 되는데 일, 시간, 분은 전부 60의 배수이기 때문에
//60으로 나눈 나머지가 모두 뺀 값이 됩니다.
int sec = second % 60;
System.out.println(day + "일 " + hour +"시간 " + minute + "분 " + sec +"초");
13.자바에서 콘솔에서 입력받기
Scanner sc = new Scanner();
//Scanner는 java.util.Scanner 라서 그냥 Scanner라고 쓰면 에러가 나는데
//Scanner 글자에 마우스 커서를 갖다 대면 import를 대신 해준다고 메시지가 출력됩니다.
//클릭하면 import를 해줍니다.
//문자열을 입력받고자 하면
문자열변수 = sc.nextLine();
//정수 입력받고자 하면
정수변수 = sc.nextInt();
실습)
이름과 나이를 입력받아서 출력
이름은 문자열 나이는 정수
//이름과 나이를 입력받아서 출력하기
Scanner sc = new Scanner(System.in);
//이름을 입력받기
System.out.print("이름입력:");
String name = sc.nextLine();
//나이를 입력받기
System.out.print("나이입력:");
int age = sc.nextInt();
//출력
System.out.println("이름은 " + name + " 나이는 " + age);
sc.close();
14.제어문자
- 역슬래시 다음에 하나의 영문 문자를 기재해서 특별한 기능을 수행하도록 한 문자
\n
: 줄 바꿈\t
: 탭\\
: 역슬래시\'
: '\"
: "\a
: 비프음 - C 언어에서는 메인보드 내의 스피커를 이용해서 beep 음 출력
*윈도우 프로그래밍을 하다가 버튼의 제목 같은 곳에서 줄바꿈을 할려고 했는데 \n 으로 안되면 \r \n 을 이용
'Language_Study > JAVA' 카테고리의 다른 글
[JAVA, App] 5.데이터정렬 (0) | 2020.12.23 |
---|---|
[JAVA, App] 4.Array (0) | 2020.12.23 |
[JAVA, App] 3.제어문 (0) | 2020.12.21 |
[JAVA, App] 1.자료형 (0) | 2020.12.21 |
[JAVA, App] 0.Intro (0) | 2020.12.19 |