티스토리 뷰
연산자란?
- 연산이랑 데이터를 처리하고 결과를 산출하는 작업
- 연산은 항(피연산자)과 연산자로 이루어짐
- 항은 연산에 사용되는 값을 의미하며, 연산자는 기호를 의미
- 항과 연산자를 이용해서 연산 과정을 나열한 것을 연산식 이라 함
연산자의 종류
| 종류 | 연산자 | 기능 |
| 최고연산자 | ., () | 가장 먼저 연산 |
| 증감연산자 | ++, -- | 1씩 증감시킴 |
| 산술연산자 | +, -, *, /, % | 사칙연산, 나머지연산(%) |
| 시프트연산자 | >>, << | 비트의 이동 |
| 비교연산자 | <, >, <=, >=, ==, != | 두 값을 비교 |
| 논리연산자 | &&, ||, ! | 논리의 연산 |
| 비트연산자 | &, |, !, ^ | 비트단위의 논리연산 |
| 대입연산자 | =, +=, -=, *=, /=, %= | 우변의 값을 좌변에 대입 |
| 삼항연산자 | 조건식 ? A : B | 조건식이 참 일때 A반환 거짓일 때 B반환 |
산술연산자
말 그대로 산술을 해주는 연산자이다.
자바에서 곱은 *, 나눗셈은 / 으로 표기하고 %는 나머지 연산자이다.
int n1,n2,n3;
n1 = 20;
n2 = 7;
n3 = n1 + n2;
System.out.println("n3 = " + n3);
n3 = n1 - n2;
System.out.println("n3 = " + n3);
n3 = n1 / n2; //몫을 반환한다.
System.out.println("n3 = " + n3);
n3 = n1 % n2; //나머지를 반환
System.out.println("n3 = " + n3);
n3 = 27
n3 = 13
n3 = 2
n3 = 6
나머지 연산은 수가 짝인지 아닌지를 판단하는데 자주 쓰인다.
2로 나눈 나머지가 0 이면 짝수 1이면 음수이다.
대입연산자
대입연산자는 좌변에 있는 값을 우변으로 대입을 해준 것이다.
//대입연산자
int n1 = 10;
int n2 = 7;
System.out.printf("=연산자 : n1 = %d, n2 = %d\n",n1,n2);
=연산자 : n1 = 10, n2 = 7
복합대입연산자
복합대입 연산자는 +=, -=, *=, /=, %= 5가지가 있다
n1 += n1 을 풀어쓰면 n1 = n1 + n1 으로 자기 자신에 연산한 결과를 대입하는 연산자이다.
int x = 10;
int y = 1;
y += x; // y = y + x; -> y = 1 + 10;
System.out.println("y = " + y);
y *= x; //y = y * x -> y = 11 * 10;
System.out.println("y = " + y);
y %= x; // y = y % x;
System.out.println("y = " + y);
y = 11
y = 110
y = 0
비교연산자
비교연산자는 관계연산자를 사이에 두고 값을 비교하여 boolean 자료형(true,false)으로 반환한다.
<, >, <=, >=, ==, != 으로 6가지가 있다 순서대로 작다, 크다, 작거나 같나, 크거나 같다, 같다, 같지 않다 이다.
int a =10;
int b = 20;
boolean result;
result = a < b;
System.out.println("a < b : " + result);
result = a == b; //a의 값이 b와 같냐?
System.out.println("a == b : " + result);
result = a != b; //a의 값이 b와 다르냐?
System.out.println("a != b : " + result);
a < b : true
a == b : false
a != b : true
기준은 왼쪽 값이 기준이다.
boolean 값으로 반환되는 연산자들은 외우는 것이 좋다.
논리연산자
논리연산자는 boolean형 데이터를 가지고만 연산을 진행할 수 있다.
논리연산자는 &&, ||, ! 로 3가지가 있고 순서대로 논리곱(AND), 논리합(OR), 부정(NOT)이다.
||(논리합) '|' 이 기호는 일반적인 키보드 기준 엔터키와 백스페이스 사이에 있는 키를 쉬프트를 누르고 치면 나온다.
| 값 | 값 | 결과(&&) |
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
| 값 | 값 | 결과(||) |
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
!(NOT)은 참을 거짓으로, 거짓을 참으로 바꾸는 연산식이다.
int my_age = 30;
int limit = 25;
boolean result;
//&& : 논리곱(AND) -> 앞 뒤 항이 모두 참이면 참, 아니면 거짓
result = (limit - my_age) >= 5 && my_age > 30;
System.out.println("&&연산자 : " + result);
// 참 && 참 = 참
// 참 && 거짓 = 거짓
// 거짓 && 참 = 거짓
// 거짓 && 거짓 = 거짓
//|| : 논리합(OR) -> 앞 뒤 항 중에 하나라도 참이면 참, 아니면 거짓이면 거짓
int n1 = 10;
int n2 = 20;
boolean result2 = (n1+=10) > 20 || n2 - 10 == 11;
System.out.println("||연산자 : " + result2);
// 참 || 참 = 참
// 참 || 거짓 = 참
// 거짓 || 참 = 참
// 거짓 || 거짓 = 거짓
//! : 부정(NOT) -> 참을 거짓으로, 거짓을 참으로 연산
System.out.println("!연산자 : " + !result2);
&&연산자 : false
||연산자 : false
!연산자 : true
비트연산자
비트연산자는 비트 단위로 연산을 하는 것이다. 논리연산자와 비슷하다.
0이 false, 1이 true이고 &, |, ^, ~ 4가지 순서대로 논리곱, 논리합, 배타적 논리합, 부정이다.
| 값 | 값 | 결과(&) |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
&(and) 결과표
| 값 | 값 | 결과(|) |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
|(OR) 결과표
| 값 | 값 | 결과(^) |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
~(NOT) 은 1을 0으로 0을 1로 바꾸는 연산식이다
int a = 10; //1010
int b = 7; //0111
int c = a & b; //0010
System.out.println("c : " + c);
int a2 = 12; //1100
int b2 = 8; //1000
int c2 = a2 | b2; //1100
System.out.println("c2 : " + c2);
int a3 = 9; //1001
int b3 = 11;//1011
int c3 = a3 ^ b3;//0010
System.out.println("c3 : " + c3);
int x = 7;
System.out.println("~x : " + ~x); // ~x = -(x + 1)
c : 2
c2 : 12
c3 : 2
~x : -8
마지막 ~(NOT)에 대한 값이 이상한 것을 확인할 수 있다.
2진수로 음수를 표현할 수 없기 때문에 비트의 맨 앞자리는 수의 표현이 아닌 부호의 표현으로 쓰기로 했다.
자료형 int는 32비트이다 7을 2진수로 표현하면
00000000 00000000 00000000 00000111이다. 여기서 맨 앞에 있는 0은 부호를 의미하고 ~(NOT)을 하게 되면
11111111 11111111 11111111 11111000인데 이러면 숫자가 많이 커져서 보수라는 것을 사용하는데 보수에 대한 개념은 아직 이해하지 못해서 간단하게 값을 찾을 수 있는 방법은 ~x는 -(X+1)이라고 생각하면 된다.
시프트연산자
시프트연산자는 비트를 이동시키는 연산자이다.
>>, << 두 개고 화살표 방향대로 << 왼쪽으로 >> 오른쪽으로 이동시킨다.
int i = 2; //0010
System.out.println("i << 2 : " + (i << 2)); //i를 왼쪽으로 두 칸 이동해라
System.out.println("i << 2 : " + (i >> 2)); //i를 오른쪽으로 두 칸 이동해라
i << 2 : 8
i << 2 : 0
2(0010)를 왼쪽으로 두 칸 이동하면 1000이되면서 10진수로 변경한 8이 출력이 된다.
오른쪽으로 두칸 이동하면 이동할 곳이 더 없으므로 사라지면서 0이 출력된다.
비트연산자와 시프트연산자는 암호화, 복호화 작업에 자주 쓰인다.
증감연산자
증감연산자는 값을 1씩 증감시키는 연산자이다.
++, --가 있다.
증감 연산자는 데이터의 앞에 붙는지 뒤에 붙는지에 따라 선행증감, 후행증감으로 나누어진다.
선행증감은 증감을 시키고 코드가 진행이 되고, 후행 증감은 코드가 진행된 후에 증감이 된다.
//선행증감
//변수의 앞에서 사용
int a = 10;
System.out.println("++a : " + ++a);
//후행증감
//변수의 뒤에서 사용
int b = 10;
System.out.println("b++ : " + b++);
System.out.println("b : " + b);
++a : 11
b++ : 10
b : 11
후행 증감이 이해가 잘 안 될 수도 있다. 아래에 있는 코드의 결과를 예상해 보자.
int x = 5;
int y = x++;
System.out.println("x : " + x);
System.out.println("y : " + y);
x : 5
y : 6
이라고 생각했으면 틀렸다
처음에 x에 5가 들어가고 y에 x++이 들어간다 x++은 후행 증감으로 y에 x의 값이 들어간 후 x를 1 증가시키므로
x : 6
y : 5
위와 가은 결과가 나온다
x : 6
y : 5
삼항연산자
삼항연산자는 조건식에 대한 값을 통해 데이터를 반환하는 연산자이다.
조건식은 기본적으로 boolean 자료형으로 반환이 돼야 한다.
상항연산자 : 조건식 ? 참일 때 반환할 값 : 거짓일 때 반환할 값;
int a = 10;
int b = 15;
boolean result = ++a >= b ? true : false;
System.out.println("result : " + result);
int n1 = 10;
int n2 = 20;
char result2 = (n1 + n2) == n2 ? 'O' : 'X';
System.out.println("result2 : " + result2);
result : false
result2 : X
이런 식으로 반환값의 자료형은 정해진 게 없다. 예시로 boolean과 char의 자료형을 썼지만 int나 String 같은 자료형들도 사용할 수 있다.
[JAVA] 제어문(if, switch)
제어문이란? 일반적으로 프로그램은 위에서 부터 아래로 순차적으로 실행이 된다. 순차적으로만 실행이 된다면 코드의 길이 매우 길어지거나 표현하기 어려운 상황이 발생할 수도 있다. 예를
treebomb-code.tistory.com
'Java' 카테고리의 다른 글
| [JAVA] 제어문(for,while) (0) | 2023.11.28 |
|---|---|
| [JAVA] 제어문(if, switch) (0) | 2023.10.24 |
| [JAVA] 형 변환 (0) | 2023.10.09 |
| [Java] 변수 (0) | 2023.10.02 |
| [JAVA] 자바 출력문 print(), printf(), println() (0) | 2023.09.25 |
- Total
- Today
- Yesterday
- 자료형
- 자바 세터
- 자바 생명주기
- 자바 클래스 설명
- 자바 배열 생성
- 코딩
- 자바 게터
- 자바 배열 내림차순 정렬
- java기초
- 자바 배열 초기화
- Java
- 게터세터 쉽게 만들기
- 생성자 쉽게 만들기
- 자바기초
- 생성자 호출 위치
- 생성자란
- 모바일프레임워크
- 생성자를 써야하는 이유
- 자바 this()
- 자바 Arrays
- 코린이
- 생성자 위치
- 배열 내림차순
- 변수 생명주기
- getter setter 쉽게 만들기
- java overloading
- 자바 클래스 이해
- 자바 배열
- 자바
- 자바 기초
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |