산술연산자
산술연산자 종류
- +(더하기), -(빼기), *(곱하기), /(나누기), %(나머지)
class HelloJava{
public static void main(String []args ){
int a, b;
a = 7;
b = 3;
System.out.println("a + b = "+(a+b));
System.out.println("a - b = "+(a-b));
System.out.println("a * b = "+(a*b));
System.out.println("a / b = "+(a/b));
System.out.println("a % b = "+(a%b));
}
}
산술연산자 특징
- int 끼리 나눗셈을 하면 int 형의 값이 나오므로 몫을 따로 구할 수 있다.
증감연산자
증감연산자의 정의와 특징
- 해당 변수의 값을 1씩 증가하거나, 1씩 감소시키는 연산자로, 변수의 앞과 뒤에 붙을 수 있다
- ++(1씩 증가), --(1씩 감소)
- 대입연산자와 같이 쓸 경우, 연산 순서가 다르기 때문에 결과가 다르게 나올 수 있다.
앞에 붙으면 먼저 1 증가 시킨 후 대입을 하지만, 뒤에 붙으면 대입한 후 1 증가시킨다.
따라서 아래 코드와 같은 결과과 나온다.
class HelloJava{
public static void main(String []args ){
int a, b, a1, b1;
a = 5;
b = 5;
a1 = a++;
b1 = ++b;
System.out.println("a = "+a);
System.out.println("a1 = "+a1);
System.out.println("b = "+b);
System.out.println("b1 = "+b1);
}
}
복합치환연산자
복합치환연산자란?
- 변수 자신과 다른 값과 산술한 결과를 자신에게 다시 대입 하는 것이다.
복합치환연산자의 종류
- +=, -=, *=, /=, %=
class HelloJava{
public static void main(String []args ){
int a, b;
a = 7;
b = 3;
a += b; // a = a + b
System.out.printf("a += b --> a = %d", a);
}
}
- a 의 값은 7, b 의 값은 3이므로 더한 뒤 a 변수에 값을 할당하여, a는 10의 값을 갖게 되었다.
비교연산자
비교연산자의 정의
- 값을 비교하는 연산자
- boolean의 결과값이 나오며, if 의 조건이나 while 의 조건등에서 많이 사용된다.
비교연산자의 종류
- x > a: x는 a보다 크다
- x < b: x는 a보다 작다
- x >= a: x는 a보다 크거나 같다
- x <= a: x는 a보다 작거나 같다
- x == a: x와 a는 같다
- x != a: x와 a는 같지 않다
class HelloJava{
public static void main(String []args ){
int a, b;
a = 17;
b = 22;
System.out.println(a > b);
System.out.println(a <= b);
System.out.println(a == 17);
System.out.println(b != 22);
}
}
논리연산자
논리연산자의 정의
- 논리값을 비교하는 연산자로 두 개 이상의 boolean값을 비교한다.
- boolean의 결과값이 나오며, 비교연산자와 함께 자주 사용된다.
- 연산 순서는 비교연산자 후에 논리 연산자이다.
논리연산자의 종류
- 논리곱
- &&
- and 연산(~ 이고)
- 모두 true 일 때, true의 값이 나온다. (1개라도 false이면 결과값은 false 이다.)
- 논리합
- ||
- or 연산(~이거나)
- 1개 이상이 true 일 때, true 의 값이 나온다.(모두 false 이면 결과값은 false 이다.)
Short-circuit evalution(단락평가)
- 첫 번째의 결과값이 결과를 내기에 충분할 때, 두 번째부터 평가하지 않는 것을 뜻한다.
- 반대말로 lazy evalution(지연평가) 가 있다.
- (조건 1 && 조건 2) 가 주어졌을 때, 조건 1이 거짓이라면 조건 2를 판별하지 않고 결과값을 내는 것
- (조건 1 || 조건 2)가 주어졌을 때, 조건 1이 참이라면 조건 2를 판별하지 않고 결과값을 내는 것
class HelloJava{
public static void main(String []args ){
int a, b;
boolean x, y;
a = 17;
b = 22;
x = a > 1 && b < 3;
y = a > 1 || b < 1;
System.out.println(x);
System.out.println(y);
}
}
비트연산자
비트연산자란
- 비트끼리 연산하여 값을 내는 것을 뜻한다.
비트연산자의 종류
- 비트곱
- &
- 두 개의 비트 상태가 모두 1일 때 결과가 1이 된다.
- 비트합
- |
- 두 개의 비트 상태 중에 한 개 이상이 1일 때 결과가 1이 된다
- 비트차
- ^
- 두 개의 비트 상태 가 달라야 1이 된다(둘 다 0이거나 1이면 결과값은 0이다)
- 해당 비트 차를 이용하여 새로운 변수를 선언하지 않아도 2개의 변수 값을 뒤바꾸는 것이 가능하다.
- 쉬프트연산
- x << n: 변수 x의 비트를 n만큼 왼쪽으로 이동한다
비트는 이진수로 되어있으며 왼쪽으로 밀면 값이 커지므로 2n를 곱한것과 같은 결과가 나온다. - x >> n: 변수 x의 비트를 n만큼 오른쪽으로 이동한다
비트는 이진수로 되어있으며 오른쪽으로 밀면 값이 작아지므로 2n를 나눈 것과 같은 결과가 나온다.
- x << n: 변수 x의 비트를 n만큼 왼쪽으로 이동한다
비트연산자의 진리표
X | Y | & | | | ^ |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
기본적으로 비트연산 하는 순서
- 비트 연산을 할 때 십진수가 주어질 경우 이진수로 변경한다.
- 각 자릿수를 위의 진리표에 맞게 비교하여 결과를 낸다.
class HelloJava{
public static void main(String []args ){
int a, b;
a = 17; //10001(2)
b = 22; //10110(2)
System.out.println(a & b); //10000(2) = 16
System.out.println(a | b); //10111(2) = 23
System.out.println(a ^ b); //00111(2) = 7
System.out.println(a << 2); //1000100(2) = 68
System.out.println(b >> 1); //1011(2) = 11
}
}
비트차 연산으로 Swap 하기
- 보통의 Swap 은 변수를 하나 더 만들어서 넣고 하나씩 옮기는 것이 일반적이지만, 비트차를 이용할 경우 Swap 이 가능하다.
class HelloJava{
public static void main(String []args ){
int a, b;
a = 17;
b = 22;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);
System.out.println(b);
}
}
- 비트차 연산으로 Swap 하는 것의 원리
- 할당해서 값이 변했을 때를 임의적으로 an등으로 지칭했을 때, 다음과 같다.
- a = a ^ b
> a1 값이 a ^ b를 담는다. - b = a ^ b
> b = a1 ^ b = (a ^ b) ^ b
> XOR 연산 법칙에 의하여 b1 = a 가 된다. - a = a ^ b
> a = a1 ^ b1
> a = (a ^ b) ^ a
> XOR 연산 법칙에 의하여 a = b가 된다.
비트연산자를 논리 연산자처럼 사용하기
- 비트연산자는 논리 연산자처럼 사용이 가능하다.
- 단, 논리 연산자처럼 Short-Circult evalution(단락평가)를 사용하지 않으므로 증감연산자처럼 복합적으로 사용하는 경우는 변수값이 달라질 수 있으므로 유의해야한다.
class HelloJava{
public static void main(String []args ){
int a, b, a1, b1;
a = 17;
b = 22;
a1 = 17;
b1 = 22;
System.out.println(a == 17 & b == 22);
System.out.println(a++ != 17 && b++ != 32);
System.out.println(a1++ != 17 & b1++ != 32);
System.out.printf("a = %d, b = %d, a1 = %d, b1 = %d", a, b, a1, b1);
}
}
삼항연산자(조건연산자)
삼항연산자란?
- 3개의 항을 이용하여 연산하는 연산자로, if문 대신 간결하게 쓰고 싶을 때 많이 사용한다.
- (항)? 항2 : 항3 --> (조건식)? (조건이 true 일 때 실행문):(조건이 false 일 때 실행문)
- 결과값은 조건에 따라 항2 또는 항3이 된다.
class HelloJava{
public static void main(String []args ){
int a;
a = 17;
System.out.println(a == 5? "a is 5": "a is not 5");
}
}
'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글
제어문(2) - 조건문 (0) | 2024.05.13 |
---|---|
제어문(1) - 정의와 종류 (0) | 2024.05.13 |
자료형 (0) | 2024.05.11 |
기본 입출력 (0) | 2024.05.10 |
자바의 기본 구성과 API (0) | 2024.05.10 |