: 항이 한 개
num++
: 항이 두 개
1+1
: 항이 세 개
(3>1) ? 1:0
: 우측의 데이터를 좌측의 변수에 대입
int num = 100;
: 부호를 나타내는 연산자
+10, -10
10 % 3
: 값을 1만큼 늘리거나 (++), 1만큼 줄임(--)
num++, ++num
num--, --num
: 두 항의 값 크기 비교
10 > 9
5 != 3
: 논리식에 대해 참 거짓 판단
(10 > 9) && (1 == 0)
(10 > 9) || (1 == 0)
: 대입 연산자와 다른 연산자를 조합한 연산
num1 += num2;
num1 %= num2;
개념 관련 코드입니다.
public class Main5 {
public static void main(String[] args) {
// 1. 대입 연산, 부호 연산자
int num = 100;
num = 10;
num = +10;
num = -10;
// 2. 산술 연산자, 증가/감소 연산자
System.out.println("== 산술 연산자, 증가/감소 연산자 ==");
int numX = 10;
int numY = 3;
int result = 0;
result = numX + numY;
result = numX - numY;
result = numX * numY;
result = numX / numY;
result = numX % numY;
System.out.println(result);
int numZ = 1;
System.out.println(numZ++);
System.out.println(numZ);
numZ = 1;
System.out.println(++numZ);
System.out.println(numZ);
numZ = 1;
System.out.println(numZ--);
System.out.println(numZ);
numZ = 1;
System.out.println(--numZ);
System.out.println(numZ);
// 3. 관계 연산자
System.out.println("== 관계 연산자 ==");
int numA = 10;
int numB = 9;
System.out.println(numA > numB);
System.out.println(numA < numB);
System.out.println(numA == numB);
System.out.println(numA != numB);
// 4. 논리 연산자
System.out.println("== 논리 연산자 ==");
System.out.println((10 > 9) && (1 == 0));
System.out.println((10 > 9) || (1 == 0));
// 5. 복합 대입 연산자
System.out.println("== 복합 대입 연산자 ==");
int num1 = 10;
int num2 = 5;
num1 += num2;
System.out.println(num1);
num1 -= num2;
System.out.println(num1);
num1 *= 2;
System.out.println(num1);
num1 %= 3;
System.out.println(num1);
// 6. 삼항 연산자
System.out.println("== 삼항 연산자 ==");
int a = 100;
String aResult = (a == 100)? "yes" : "no";
System.out.println("aResult = " + aResult);
}
}
출력 결과입니다.
== 산술 연산자, 증가/감소 연산자 ==
1
1
2
2
2
1
0
0
0
== 관계 연산자 ==
true
false
false
true
== 논리 연산자 ==
false
true
== 복합 대입 연산자 ==
15
10
20
2
== 삼항 연산자 ==
aResult = yes
10진수 | 2진수 |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
2진수 3의 2의 보수 : 11 -> 01
: 비트 단위로 연산
기본 연산자 | 비트 연산자 |
---|---|
5 && 3 5 \\ 3 | 0101 & 0011 0101 \ 0011 |
: 두 개의 비트 값이 모두 1인 경우에만 결과 1
bit1 | bit2 | 결과값 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
5 & 3 -> 1
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
5 | 0 | 1 | 0 | 1 |
3 | 0 | 0 | 1 | 1 |
결과 | 0 | 0 | 0 | 1 |
: 두 개의 비트 값 중 하나라도 1이면 결과 1
bit1 | bit2 | 결과값 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
5 & 3 -> 7
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
5 | 0 | 1 | 0 | 1 |
3 | 0 | 0 | 1 | 1 |
결과 | 0 | 1 | 1 | 1 |
: 두 개의 비트 값이 같으면 0, 다르면 1
bit1 | bit2 | 결과값 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
5 & 3 -> 6
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
5 | 0 | 1 | 0 | 1 |
3 | 0 | 0 | 1 | 1 |
결과 | 0 | 1 | 1 | 0 |
: 비트 값이 0이면 1로, 1이면 0으로 반전
bit1 | 결과값 |
---|---|
0 | 1 |
1 | 0 |
~5 -> -6
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
5 | 0 | 1 | 0 | 1 |
결과 | 1 | 0 | 1 | 0 |
: 비트를 왼쪽으로 이동
3 << 1
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
3 | 0 | 0 | 1 | 1 |
결과 | 0 | 1 | 1 | 0 |
: 비트를 오른쪽으로 이동
3 >> 1
bit1 | bit2 | bit3 | bit4 | |
---|---|---|---|---|
3 | 0 | 0 | 1 | 1 |
결과 | 0 | 0 | 0 | 0 |
: 비트를 오른쪽으로 이동 (부호 비트 상관없이 0으로 채움)
개념 관련 코드입니다.
public class Main6 {
public static void main(String[] args) {
// 1. 비트 논리 연산자
System.out.println("== 비트 논리 연산자 ==");
// 1-1. AND 연산자 (&)
int num1 = 5;
int num2 = 3;
int result = 0;
result = num1 & num2;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 1-2. OR 연산자 (|)
num1 = 5;
num2 = 3;
result = num1 | num2;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 1-3. XOR 연산자 (^)
num1 = 5;
num2 = 3;
result = num1 ^ num2;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 1-4. 반전 연산자 (~)
num1 = 5;
result = ~num1;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%s\n", (Integer.toBinaryString(result)));
// 2. 비트 이동 연산자
System.out.println("== 비트 이동 연산자 ==");
// 2-1. << 연산자
int numA = 3;
result = numA << 1;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 2-2. >> 연산자
numA = 3;
result = numA >> 1;
System.out.println(result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 2-3. >>> 연산자
numA = -5;
result = numA >> 1;
System.out.println(result);
System.out.printf("%s\n", (Integer.toBinaryString(numA)));
System.out.printf("%s\n", (Integer.toBinaryString(result)));
numA = -5;
result = numA >>> 1;
System.out.println(result);
System.out.printf("%s\n", (Integer.toBinaryString(numA)));
System.out.printf("%s\n", (Integer.toBinaryString(result)));
}
}
출력 결과입니다.
== 비트 논리 연산자 ==
1
0101
0011
0001
7
0101
0011
0111
6
0101
0011
0110
-6
0101
11111111111111111111111111111010
== 비트 이동 연산자 ==
6
0011
0110
1
0011
0001
-3
11111111111111111111111111111011
11111111111111111111111111111101
2147483645
11111111111111111111111111111011
1111111111111111111111111111101