본문 바로가기

Java

3일차 공부 연산자

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)

2초마다 빨강 파랑 반복

 

 

 

1초마다 월화수목금토일 반복, 내가 만듬 .지림.

 

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

 

Hello를 Java로 바꿔서 해봄

 

 

=> 데이터를 분류할 때 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