월루를 꿈꾸는 대학생

연산자 본문

Programing/Java

연산자

하즈시 2021. 2. 27. 01:44
728x90

연산자란?

 

✔연산을 수행하는 기호

 

연산자

✔연산을 수행하는 기호

 

피연산자

✔연산자의 작업 대상 ( 변수, 상수, 리터럴 )

 

연산자는 피연산자로 연산을 수행하면 항상 결과값을 반환 

 

https://cremazer.github.io/java-Types-of-Operators/

 

 

 

연산자 우선순위

 

https://m.blog.naver.com/PostView.nhn?blogId=29java&logNo=70188119123&proxyReferer=https:%2F%2Fwww.google.com%2F

 

연산자의 우선순위로 항상 차례대로 계산이 되는 것이 아니라 우선순위가 높은 연산자부터 계산이 진행되는 방식 

 

 

 

연산자 결합 법칙

✔ 산술 > 비교 > 논리 > 대입 순으로 진행

✔ 단항 > 이항 > 삼항  

✔ 단항&대입 빼고 다 왼->우 임 

 

 

산술변환

✔이항 연산자의 경우 두 피연산자의 타입이 일치해야하므로 타입을 맞춰줘야함 

 

int i = 10;
float f - 20.0f;

float result = f + (floeat) i ;//  형변환을 해야 서로 산술이 가능 

 

* 다만 큰 타입으로 변환시에는 형변환 연산자 생략가능 

 

* 연산결과의 타입은 피연산자 타입과 일치 즉 int연산하면 소수점은 사라지고 정수만 남음 

피연산자의 타입이 int보다 작으면 타입이 int로 변환 

 

 

]즉 저기 a,b는 byte 타입이라 int 보다 작음 

연산자의 개입이 있을 경우 해당 피연산자들은 int 보다 작기에 int로 변환이 된 후 계산 즉 byte값이 아니다

 

해당 오류를 없애기 위해선 형변환이 필요 

 

 

 

 

단항 연산자 

✔ 증감 연산자 : 피연산자값 1증가

✔ 감소 연산자 : 피연산자값 1감소 

 

https://dojang.io/mod/page/view.php?id=96

 

 

✔ 값이 왜 300이 아니라 44일까 ? byte형이기 때문에 byte는 2의 8승으로 -128 ~ 127 범위 이상의 값을 담을 수 없어서  담는데까지 담고 나머지 버린 후 값을 낸 거다 

 

 

c의 자료형이 long 이지만 값을 담을 수 없어 오버플로우 발생 

 

✔ int와 int의 곲은 int이기 때문이다 이미 int * int 계산한 결과가 int라서 오버플로우가 발생 -> 그 값이 long c에 담기는 것  

 

 

즉 값을 맞추기 위해 이미 계산 전에 형변환이 일어나야함 즉 a 나 b 에 형변환을 시켜줘서 더 큰 쪽으로 계산결과가 형변환 일어나도록 해주는 게 포인트 

 

 

 

리터럴 혹은 상수끼리의 연산은 실행 과정동안 변하는 값이 아니기에 컴파일 시 컴파일러가 계산해서 그 결과로 대체

즉 컴파일러가 미리 덧셈연산을 수행하기 때문에 실행시 덧셈 연산 x 즉 실행 전에 이미 컴파일러가 결과를 c2에 저장한다는 것 

 

✔ int 간의 나눗셈 int / int 의 경우 값은 int!!! 소숫점은 버린다 

 

 

✔Math.round() 함수가 있다  

 

 

✔나머지 연산자 %

 int 나누기 하면 정수값이니까 소수 없어져서 몫 나옴

% 연산자는 나머지가 나옴

 

✔ 해당 나머지 연산자 % 는 짝수 홀수 배수 검사에 쓰임!! 

 

 

 

비교 연산자

https://keep-cool.tistory.com/19

 

 

 

10 == 10.0f 의 경우 대입 연산자 ==때문에 int 10이 float 형을 자동 형변환이 되어 같은 값으로 인식 

 

다만 0.1의 경우는 정수가 아니라 소수이다 즉 값의 오차값이 있을 수 있어서 같을 수가 없다고 판단 

 

 

문자열 비교는 equals() 

new로 만든 거는 객체이기 때문에 주소값이라 해당 문자열이랑 다름

그래서 equals() 함수를 사용해서 객체가 달라도 내용이 같으면 true 반환

equalsIgnoreCase()의 경우 대소문자 구분 x

 

 

논리연산자

 

https://opentutorials.org/module/3921/23607

 

논리 부정 연산자 ! 

 

 x || y 의 경우 x가 참이면 뒤에 y도 참이다

x && y 의 경우 x 가 거짓이면 전체적으로 거짓이다

 

이러한 로직을 이요해서 더욱 효율적으로 값 처리가 가능하다 

 

 

비트연산자 

 

✔ | -> OR 연산자  : 피연산자 중 한 쪽의 값이 1이면 1을 결과로 얻는다 그외에는 0을 얻는다

✔ & -> AND 연산자 : 피연산자 양 쪽이 모두 1이어야만 1을 결과를 얻고 그 외에는 0을 얻는다

✔^ -> XOR 연산자 : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다 같을 때는 0을 얻는다

 

https://m.blog.naver.com/PostView.nhn?blogId=brickbot&logNo=220508046954&proxyReferer=https:%2F%2Fwww.google.com%2F

 

쉬프트 연산자  

 

https://unknownyun.blogspot.com/2018/08/blog-post_59.html

 

✔ X << N 은 X의 2 N승과 같다 

✔X >>N 은 X / 2 N승과 같다 

 

 

✔ 조건 연산자 ? : 

- 조건식에 따라사 참이면 앞에 식을 거짓이면 뒤에식을 수행 

 

EX _ X>3 ? TRUE : FALSE 

 

 

 

 

 

 

 

728x90

'Programing > Java' 카테고리의 다른 글

ch 4 조건문과 반복문 _ 알고리즘  (0) 2021.03.07
ch4 조건문과 반복문  (0) 2021.03.07
Java 알고리즘 1주차  (0) 2021.02.22
0221 java 스터디 1주차  (0) 2021.02.21
Java 이클립스 + jdk 설치  (0) 2021.02.21