1~2 교시
Operator (연산자)
=> 산술연산 (수치연산)과 논리연산 (true or false)을 수행해주는 기호나 명령어
1. 연산자의 분류
1) 피연산자(연산에 사용되는 데이터)의 개수에 따른 분류
=> unary(단항) operator : 피연산자의 개수가 하나인 연산자
=> binary(이항) operator : 피연산자의 개수가 2개인 연산자
=> 삼항 연산자 : 피연산자의 개수가 3개인 연산자
2) 우선순위나 목적에 따른 분류
=> 최우선 연산자 : ( ), [ ]배열 인덱스연산자
=> 단항 연산자 : ++. --, +, -, (type - 자료형), !, ~
=> 산술 연산자 : %, *, /, +, -
=> shift 연산자 : >>, <<, >>>
=> 관계(비교) 연산자 : >, >=, <, <=, ==, !=
=> 논리 연산자 : &, l, ^, &&, ll
=> 삼항 연산자 : ?:
=> 대입 연산자 =, +=...
=> 콤마 연산자 : ,
2. 단항 연산자
1) +, -
=> 부호 연산자
2) (type)
=> 강제 형 변환 연산자
3) !
=> NOT 연산자
=> boolean 데이터에만 사용 가능
=> true -> false, false -> true
4) ~
=> 1의 보수 연산자
=> 정수 데이터에만 사용
=> 10진 정수를 2진수로 변환해서 비트 단위 연산을 해서 10진 정수로 결과를 리턴
=> 양수의 경우는 절대값이 1이 큰 음수로 결과가 만들어지고 음수는 절대값이 1이 작은 양수로 결과를 리턴
=> 그래픽 프로그램에서 주로 사용
5) ++, --
=> 증감 연산자
=> 정수 변수에서만 사용이 가능 (상수나 리터럴에선 안됨)
=> ++ : 변수의 데이터를 1 증가 시킴
=> -- : 변수의 데이터를 1 감소 시킴
=> 이 연산자는 피연산자의 앞 뒤 모두 사용가능
=> ++, --가 변수 앞에 있는 경우(prefix) : 변수의 값을 전저 증가시키고 명령문에 사용
=> ++, --가 변수 뒤에 있는 경우(postfix) : 명령문을 먼저 수행하고 변수의 값을 증가시킴
int a = 10;
a++; //현재의 a의 데이터는 11
++a; //현재의 a의 데이터는 12
System.out.println(a++);
// ++가 뒤에 있어서 순서가 System.out.println(a); a = a + 1; 의 의미로 해석
//12가 출력되고 a 의 값은 13이 된다.
System.out.println(++a);
//++가 앞에 있어서 a = a + 1; System.out.println(a); 의 의미로 해석
//a를 14로 만들고 출력을 하기 때문에 화면에는 14가 출력
a = 0;
int result = ++a + ++a;
System.out.println("result:" + result);
//결과는 3
//a의 값을 먼저 증가시켜서 1+
//하나를 증가시켜서 1 + 2
남이 이해하기 쉽게하려면
https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=1
https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=2
https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=3
String addr = "https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=";
int pageNo = 1;
String url = addr + pageNo; //"https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=1"
pageNo++;
url = addr + pageNo; //"https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=2"
pageNo++;
url = addr + pageNo; //"https://pt.masangsoft.com/index.php?mid=PT_BOARD4&page=3"
3 교시
3. 산술 연산자
=> %, *, /, +, -
1) %는 나머지 구해주는 연산자로 정수 데이터에만 사용
10 % 7 : 3이 나온다
ex1)
ex2)
int time = 87600; //초 라고 하고 몇 시간 몇 분 몇 초
int hour = time / 3600; //시간
int minyte = (time - hour * 3600)60; //분
int second = (time - hour * 3600 - minute * 60); //초
int second = time % 60;
4 교시
2) *, /, +, -
모든 숫자 데이터에사용이 가능
산술연산을 할 때 연산은 동일한 자료형끼리만 가능하기 때문에 서로 다른 자료형인 경우 더 큰 범위의 자료형으로 강제 형변환해서 수행
=> 산술연산의 결과는 연산을수행한 자료형으로 리턴
=> 산술연산의 결과가 int 보다 작은 자료형이면 int로 변환해서 리턴
=> 정수 / 정수의 결과는 몫만 정수로 리턴
3) 산술 연산을 할 때 되도록이면 소수가 있는 실수는 사용하지 않는 것이 바람직
=> 실수는 정확하게 표현하지 못하는 경우가 있어서 잘못된 결과를 리턴할 수 있기 때문이다.
=> 정확한 계산을 위해서는 정수로 변환해서 계산을 하던가 아니면 각 자리를 나누어서 계산을 하는데 대부분의 언어는 이러한 작업을 자동으로 해주는 클래스나 함수를 제공
4. shift 연산자
=> <<, >>, >>> 세개
=> 정수 데이터에만 사용되는 연산자
=> 10진 정수를 2진수로 변환해서 비트 단위로 작업을 한 후 다시 10진 정수로 리턴
=> << : 왼쪽으로 shift하는데 1번 할 때마다 곱하기 2한 효과
=> >> : 오른쪽으로 shift하는데 1번 할때마다 나누기 2한 효과
=> 왼쪽 shift 의 경우 무조건 왼쪽으로 밀고 빈 자리에 0을 채움
=> 오른쪽 shift 경우는 오른쪽으로 밀고 빈 자리에 첫번째 비트를 채움
=> >>> : 오른쪽으로 shift하는데 빈 자리에 무조건 0을 채움
=> 32번 이상 shift 하라고 하면 32로 나눈 나머지 만큼만 shift (33번 하라고 하면 1번뿐이 안한다.
7 << 1 : 14
7 << 2 : 28
7 >> 1 : 3
7 >> 2 : 1
=> 다른 언어에서는 >>>는 없는 경우가 많고 일반 프로그래링에서는 잘 안쓰이기도 하지만 MS-WIndows Programming 처럼 키보드를 사용하는 프로그램에서는 키에 기능을 부여할 때 사용하고 이전의 Apple 문서에 종종 이용
1,2,4,8,16 처럼 2의 지수승 형태이면 같이 사용할 수 있는 옵션이다.
Apple은 위의 숫자를 1<<0, 1<<1, 1<<2 형태로 작성하기도 한다.
5~6 교시
5. 관계(비교 연산자) 연산자
=> 연산의 결과를 boolean(true or false)으로 리턴하는 연산자
1) >, >= <, <=
=> 숫자 데이터에서만 사용할 수 있는 연산자
2) ==, !=
=> 모든 자료형의 데이터에 전부 사용 가능
=> == : 같다, != : 다르다
=> 실수의 경우는 연산의 결과와 값을 직접 비교하면 잘못된 결과를 리턴할 수 있다.
(1.0 - 0.8) == 0.2 : 이 경우는 false
=> boolean 과 숫자 데이터는 내용이 같은지 비교하는 효과를 나타내지만 그 이외의 데이터는 저장하고 있는 참조(hashcode)가 같은지 비교한다.
내용이 같은지 비교하고자 하는 경우에는 equals 라는 메소드를 사용해야 한다.
10 == 10 : true
10 != 10 : false
"Hello" == "Hello" : 이 경우는 해시코드가 같은지 물어보는 것이라서 false가 나올 수 도 있다.
"Hello".equals("Hello") : 저장하고 있는 곳의 내용이 같은지 확인 - true
=> 데이터를 분류할 때 1개만 저장하는 데이터인지 0개 이상을 저장하는 자료형인지 구분할 수 있어야한다.
대다수의 교재에서는 기본형과 참조형이라고 한다.
6. 조건 논리 연산자
=>&&(and), ||(or) 반드시 기억
=> boolean 데이터끼리 연산을 해서 결과를 boolean으로 리턴하는 연산자
=> && : 2개 모두 true 일때만 true를 리턴하고 그 이외의 경우는 false를 리턴
=> ||(or) : 2개 모두 false 일 때만 false를 리턴하고 그 이외의 경우는 true를 리턴
=> Don`t Care
&&에서 앞의 조건이 false 라면 두의 조건은 확인하지 않는다.
||에서 앞의 조건이 true 라면 뒤의 조건은 확인하지 않는다.
1~100까지 숫자들에서 3의 배수이고 4의 배수인 숫자를 추출
숫자 % 3 == 0 && 숫자 % 4 == 0 // 3의 배수가 33개니까 그 중에 있는 4의 배수는 33번 확인해야한다.
숫자 % 4 == 0 && 숫자 % 3 == 0 // 4의 배수는 25개니까 그 중에 있는 3의 배수는 25번만 확인하면 된다.
두개의 결과는 같으나 과정이 다르다.
=> 반복문 안에서 &&나 || 를 사용할 때는 순서를 생각해보는 것이 좋다.
7 교시
ex) 점수확인
윤년체크
7. 비트논리 연산자
=> &, ^, |
=> 정수 데이터에만 사용 가능, 10진수로는 할 수 없고 2진수로 변환 후 계산 한다.
=> 정수를 2진수로 변경해서 비트 단위로 연산한 후 결과를 10진 정수로 리턴
=> &(and) : 둘다 1인 경우만 1이고 나머지 경우는 0
=> | (or) : 둘 다 0인 경우만 0이고 나머지 경우는 1
=> ^ (xor - Exclusive OR : 배타적 논리합 ) : 2개가 같은경우는 0, 다른 경우는 1
0^0 : 0, 0^1 : 1, 1^0 : 1, 1^1 : 0
=> System Programming 이나 Graphic Programming 에서는 필수, 빨강 + 빨강은 빨강
데이터 분석( AI 분야)에서도 필수
10 & 3 : 2
00000000 00000000 00000000 00001010
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000010 : 2
8 교시
자바 단축키
Ctrl + a : 전체선택
Ctrl + Shift + f : 줄 맞춤
'Java' 카테고리의 다른 글
6일차 공부 반복문 (0) | 2020.04.13 |
---|---|
5일차 공부 IF 문 (0) | 2020.04.10 |
4일차 공부 연산자 ~ IF문 (0) | 2020.04.09 |
2일차 공부 초기설정 (0) | 2020.04.07 |
1일차 공부 (0) | 2020.04.06 |