[JAVA NOTE]4. Operator
기본
연산
- 수, 함수 등에서 일정한 법칙에 따라 결과를 내는 조작
연산자
- 수,함수 등에서 일정한 법칙에 따라 결과를 내는 조작을 위한 인자
대입연산자
- 우측의 값을 좌측에 대입한다.
→ 우측 값을 좌측에 대입하면 우측의 값은 변하지 않으나 좌측의 변수만 변한다.
→ 몇몇 특수한 경우를 제외하면 기본적으로 좌측과 우측의 자료형이 동일할 때 대입 연산자 사용이 가능함
→ 다른 자료형간의 대입연산자 사용시 형변환을 사용할 것
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 100;
System.out.print(a);
}
}
→ 우측 값을 좌측에 대입하면 우측의 값은 변하지 않으나 좌측의 변수만 변한다.
→ 몇몇 특수한 경우를 제외하면 기본적으로 좌측과 우측의 자료형이 동일할 때 대입 연산자 사용이 가능함
→ 다른 자료형간의 대입연산자 사용시 형변환을 사용할 것
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 100;
System.out.print(a);
}
}
산술연산자
- 덧셈,뺄셈,나눗셈,나머지 등이 여기에 해당함
덧셈연산자 +
- 연산자 좌,우의 값을 더하는 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 3;
int b = 4;
System.out.println(a+b);
}
}
뺄셈연산자 -
- 연산자 좌측 값에서 우측의 값을 빼는 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 10;
int b = 2;
System.out.println(a-b);
}
}
곱셈연산자 *
- 연산자 좌측 값과 우측 값을 곱하는 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 7;
int b = 3;
System.out.println(a*b);
}
}
나눗셈연산자 /
- 연산자 좌측 → 나누어지는 대상
- 연산자 우측 → 좌측 값을 나눌 값
- 나눗셈을 실행한 뒤 생기는 몫을 반환하는 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 17;
int b = 3;
System.out.println(a/b);
}
}
나머지연산자 %
- 나눗셈 실행시 생기는 몫과 나머지 부분 중 나머지를 반환하는 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 17;
int b = 3;
System.out.println(a/b);
}
}
복합대입연산자
- 대입연산자와 산술연산자가 합쳐진 모습
- += a = a + b
- -= a = a - b
- *= a = a * b
- /= a = a / b
- %= a = a % b
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 1;
a += 2; // a = a + 2; 와 같음
System.out.println(a);
int b = 5;
b -= 1; // b = b - 1; 과 같음
System.out.println(b);
int c = 2;
c *= 3; // c = c * 3; 과 같음
System.out.println(c);
int d = 6;
d /= 2; // d = d / 2; 와 같음
System.out.println(d);
int e = 9;
e %= 2; // e = e % 2; 와 같음
System.out.println(e);
}
}
- += a = a + b
- -= a = a - b
- *= a = a * b
- /= a = a / b
- %= a = a % b
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 1;
a += 2; // a = a + 2; 와 같음
System.out.println(a);
int b = 5;
b -= 1; // b = b - 1; 과 같음
System.out.println(b);
int c = 2;
c *= 3; // c = c * 3; 과 같음
System.out.println(c);
int d = 6;
d /= 2; // d = d / 2; 와 같음
System.out.println(d);
int e = 9;
e %= 2; // e = e % 2; 와 같음
System.out.println(e);
}
}
비교연산자
- 연산자의 좌우 값을 비교하는 연산자
- 일반적인 산수의 부등호와 같은 역할 함
- 결과는 boolean형(true or false)로 반환합니다.
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 4;
int b = 3;
System.out.println(a < b);
}
}
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 4;
int b = 3;
System.out.println(a < b);
}
}
전위/후위 연산자
-
int 자료형에 사용할 수 있는 연산자
-
사용 위치에 따라 “전위/후위”로 나누어진다.
-
++ → 1 증가시킴
-
-- → 1 감소시킴
-
전위 연산자
→ 변수 앞에 적용된 연산자
-
후위 연산자
→ 변수 뒤에 적용된 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 5;
++a;
System.out.println(a);
int b = 1;
b++;
System.out.println(b);
int c = 3;
--c;
System.out.println(c);
int d = 6;
d--;
System.out.println(d);
}
}
-
전위 후위 연산자의 차이점
→ 실행되는 타이밍에서 차이점이 발생한다.
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 2;
System.out.println(++a);
System.out.println(a++);
System.out.println(a);
}
}
-
출력값 : 3,3,4
-
a=2로 초기화 되어 있음 그 다음줄 출력문에서 ++a에서 전위 연산자 이므로 우선순위가 가장 높아 출력보다 1 증가되어 출력되게 됨 그 다음 a++은 후위 연산자로 우선순위가 낮아 출력을 한 후 연산을 진행하게 되어 그 다음 출력문에서 a는 4이므로 다음과 같이 출력되게 되는 거임
int 자료형에 사용할 수 있는 연산자
사용 위치에 따라 “전위/후위”로 나누어진다.
++ → 1 증가시킴
-- → 1 감소시킴
전위 연산자
→ 변수 앞에 적용된 연산자
후위 연산자
→ 변수 뒤에 적용된 연산자
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 5;
++a;
System.out.println(a);
int b = 1;
b++;
System.out.println(b);
int c = 3;
--c;
System.out.println(c);
int d = 6;
d--;
System.out.println(d);
}
}
전위 후위 연산자의 차이점
→ 실행되는 타이밍에서 차이점이 발생한다.
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 2;
System.out.println(++a);
System.out.println(a++);
System.out.println(a);
}
}
출력값 : 3,3,4
a=2로 초기화 되어 있음 그 다음줄 출력문에서 ++a에서 전위 연산자 이므로 우선순위가 가장 높아 출력보다 1 증가되어 출력되게 됨 그 다음 a++은 후위 연산자로 우선순위가 낮아 출력을 한 후 연산을 진행하게 되어 그 다음 출력문에서 a는 4이므로 다음과 같이 출력되게 되는 거임
논리 연산자
- 비교연산자를 통해 도출된 true/false에 대한 논리조합
- AND(&&),OR(||),NOT(!) 이 있음
AND(&&)
- 좌우 값이 모두 true일때만 true를 반환 시킴 그 외의 모든 값은 false로 반환됨
- 좌우 값이 하나라도 false인 경우 false가 출력
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
System.out.println(true && true); // true이고 true이면 true
System.out.println(true && false); // true이고 false이면 false
System.out.println(false && true); // false이고 true이면 false
System.out.println(false && false); // fasle이고 false이면 false
}
}
OR(||)
- 좌우 값이 하나라도 true라면 true를 반환시킴
- 좌우 값이 둘다 false일 때를 제외하고는 전부 다 true 반환
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
System.out.println(true || true); // true이거나 true이면 true
System.out.println(true || false); // true이거나 false이면 true
System.out.println(false || true); // false이거나 true이면 true
System.out.println(false || false); // flase이거나 false이면 false
}
}
NOT(!)
- true는 false로, false는 true로 반환시킴
- 참과 거짓을 반전 시킨다고 생각 하면 됨
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
int a = 3;
int b = 4;
System.out.println(!(a == b));
}
}
//원래는 false가 맞으나 !로 반전시킴
결과표
비트 연산자
- 비트 단위의 연산을 위한 연산자
- 각 비트 하나씩 연산을 수행함
& 연산자
- 같은 위치의 bit간에 둘 다 1일 경우 1이 됨
- AND 연산자의 비트 버전느낌
| 연산자
- 같은 위치의 bit간에 하나라도 1일 경우 1이 됨
- OR 연산자의 비트 버전느낌
^ 연산자
- 같은 위치간에 하나만 1일 경우 1이 됨 → 비트가 서로 달라야 한다라고 생각하면 편함
- XOR 연산
~연산자
- bit의 0과 1을 바꿔준다.
Shift (시프트) 연산자
- 비트를 좌,우로 밀어주는 연산수행
<< 왼쪽 시프트연산자
- 비트를 왼쪽으로 밀어낸 뒤 공백을 0으로 채움
11001010 << 2
-> 00101000
//왼쪽 11이 사라지고 오른쪽에 00이 새로 붙음
>> 오른쪽 시프트연산자
- 오른쪽으로 밀어내지만 가장 왼쪽 비트와 동일한 숫자로 공백을 채움
11001010 >> 3
-> 11111001
// 오른쪽에 있던 010이 사라지고 밀어내기 전
// 가장 왼쪽에 숫자가 1이기에 왼쪽에 111이 추가된 것을 볼수 있음
>>> 논리 오른쪽 시프트연산자
- 비트를 우측으로 밀어내면서 공백을 0으로 채우는 연산
연산자 우선순위 (명령어 실행 순서)
- 연산자는 다음 우선순위에 맞게 실행됨
오버플로(Overflow)와 언더플로(Underflow)
기본 상식
- 컴퓨터는 메모리에 0과 1을 이용한 2진수의 형태로 데이터를 저장함 메모리에 할당되는 제일 첫 비트는 음/양을 나타내는 부호자리
- 0일경우 0 및 양수
- 1일경우 음수를 나타내게됨
- int형은 32bit(4byte)크기의 자료형이지만 제일 첫 bit는 부호를 나타내는 숫자이므로 ~ 데이터 저장이 가능함
-
int형은 32bit(4byte)크기의 자료형이지만 제일 첫 bit는 부호를 나타내는 숫자이므로
~ 데이터 저장이 가능함
- 0일경우 0 및 양수
- 1일경우 음수를 나타내게됨
-
int형은 32bit(4byte)크기의 자료형이지만 제일 첫 bit는 부호를 나타내는 숫자이므로
~ 데이터 저장이 가능함
컴퓨터가 값을 저장하는 방법
- 예를 들어 8bit 저장공간을 사용하는 정수형 변수 A가 있다고 가정하고 변수에 10을 넣는다고 가정
- 메모리에 8bit(1byte) 공간이 할당됨
- 그 공간에 정수가 할당 되게 되고 10이라는 정수 값이 저장되게됨
- 컴퓨터는 2진수로 저장하므로 메모리에 저장되는 값은 10을 8bit 크기의 2진수로 표현한 0000 1010이 되게됨
오버플로(OVERFLOW)
- 저장하고자하는 데이터가 자료형이 저장할 수 잇는 최대치보다 큰 숫자를 저장하려고 할 때 생기는 에러
- 만약 8bit 머신 (-128~127까지 저장가능함)에서 128을 저장하려고 하는 경우 에러가 남 128 → 1000 0000 → 이거는... 부호 1...?! - 0...?! → 오버플로!
import java.io.*;
class Main {
public static void main(String[] args) {
// short형 변수 varShort를 선언하고 short형의 최대값으로 초기화
short varShort = Short.MAX_VALUE;
//varShort 출력
System.out.println(varShort);
//varShort 변수에 1을 더함
varShort++;
//varShort 출력
System.out.println(varShort);
}
}
//32767
//-32768
언더플로(UNDERFLOW)
- 저장하고자하는 데이터가 자료형이 저장할 수 있는 최소치보다 작은 숫자를 저장하려고 할 때 생긱는 에러
- 만약 8bit 머신 (-128~127까지 저장가능함)에서 -129을 저장하려고 하는 경우 에러가 남 -129 → 1 {0000 0000} → 부호 0...?! → 0 → 언더플로!
import java.io.*;
class Main {
public static void main(String[] args) {
// short형 변수 varShort를 선언하고 short형의 최소값으로 초기화
short varShort = Short.MIN_VALUE;
//varShort 출력
System.out.println(varShort);
//varShort 변수에 1을 차감함
varShort--;
//varShort 출력
System.out.println(varShort);
}
}
//-31768
//32767
Author And Source
이 문제에 관하여([JAVA NOTE]4. Operator), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jitae/JAVA-NOTE4.-Operator저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)