JAVA/JAVA 개념

JAVA 개념 2-3 - 연산자

kms152000 2022. 11. 14. 16:16

연산자

: 프로그램에서 변수의 값들을 계산하기 위해 사용합니다. 사칙연산, 대입 연산, 비트 연산, 논리 연산, 관계 연산 등이 있습니다.

 

 

1) 사칙연산(Arithmetic operators)

: 숫자 데이터를 이용해 기본적인 수학연산을 수행합니다.

 

사칙연산자 사용 예 의미 결과
+ 5 + 3 덧셈 연산 8
- 5 - 3  뺄셈 연산 2
* 5 * 3 곱셈 연산 15
/ 5 / 3 나누기 연산 1
% 5 % 3 나머지 연산 2

 

 

2) 대입 연산(Assignment operators)

: 변수에 값을 대입하기 위한 연산자로 축약형과 단항 연산자 등이 포함돼 있습니다.

 

대입 연산자 사용 예 의미 결과
= speed = 50; 변수 speed에 50의 값을 할당 50
+= speed += 5; speed = speed + 5; 와 같음 55
-= speed -= 5; speed = speed - 5; 와 같음 50
*= speed *= 5; speed = speed * 5; 와 같음 250
/= speed /= 5; speed = speed / 5; 와 같음 50
%= speed %= 5 speed = speed % 5; 와 같음 0
++ speed ++; speed = speed + 5; 와 같음 5
-- speed --; speed = speed - 5; 와 같음 0
더보기

 증감연산자 : ++, --와 같은 단항 연산자는 변수명 앞 혹은 뒤에 사용할 수 있습니다. 앞에 사용하는 경우 값을 먼저 증/감한 후 변수에 대입하며 뒤에 사용하는 경우 현재 변수 값을 사용한 다음 증/감한 값을 대입하게 됩니다.

 

 

사칙연산과 대입연산 종합 예제

public class Operator1 {
    public static void main(String[] args) {
        int num1 = 30;
        int num2 = 14;

        int result1 = num1 * num2;
        int result2 = num1 % num2;

        System.out.printf("result1 : %d \n", result1);
        System.out.printf("result2 : %d \n", result2);
        System.out.println("-------------------");

        num1++;
        num2 *= 2;
        System.out.printf("num1++ : %d \n", num1);
        System.out.printf("num2 *= 2 : %d \n", num2);
        System.out.println("-------------------");

        System.out.printf("num1++ : %d \n", num1++);
        System.out.printf("--num1 : %d \n", --num1);
    }
}

 

실행결과

result1 : 420 
result2 : 2 
-------------------
num1++ : 31 
num2 *= 2 : 28 
-------------------
num1++ : 31 
--num1 : 31

 

 

3) 비트연산자(Bitwise operators)

: 일반적으로 사용하는 10진수 혹은 문자에 대한 연산이 아닌 비트단위의 연산에 사용되는 연산자입니다.

 

비트 연산자 의미 사용 예  결과
& 비트 AND 연산 a & b a(40): 0010 1000,
b(122): 0111 1010,
r: 0010 1000
| 비트 OR 연산 a | b a: 0010 1000,
b: 0111 1010,
r: 0111 1010
^ 비트 XOR 연산 a ^ b a: 0010 1000,
b: 0111 1010,
r: 0101 0010
~ 비트 inverse(역)연산,
0 -> 1, 1 -> 0
a - b a: 0010 1000,
r: 1101 0111
>> 비트를 우측으로 이동(shift),
2로 나누는 효과
a >> 2 a: 0010 1000,
r: 0000 1010
<< 비트를 좌측으로 이동(shift),
2를 곱하는 효과
a << 2 a: 0010 1000,
r: 1010 0000
  • 비트 시프트시 빈자리는 기본적으로 0으로 채웁니다.
  • 단, >> 연산시 최상위 비트가 1인(음수를 의미) 경우 빈자리는 1로 채워집니다.
  • 부호가 없는 데이터 연산의 경우 >>>을 사용해 빈자리를 무조건 0으로 채웁니다.
  • XOR 연산은 같으면 false(0) 다르면 true(1)입니다.

 

 

비트 쉬프트 연산과 XOR 연산 예제

public class Operator2 {
    public static void main(String[] args) {
        int num1 = 50;
        System.out.printf("정수값 num1 : %d, %s\n", num1, Integer.toBinaryString(num1));		

        int result1 = num1 >> 1;
        System.out.printf("num1 >> 1 : %d, %s\n", result1, Integer.toBinaryString(result1));

        int result2 = num1 << 1;
        System.out.printf("num1 << 1 : %d, %s\n", result2, Integer.toBinaryString(result2));

        System.out.println("------------------");

        int pwd = 123456;
        int encPwd, decPwd;
        int key = 0x1A253B65;
                
        System.out.println("암호화 전 비밀번호 : "+pwd);

        encPwd = pwd ^ key;

        System.out.println("암호화 후 비밀번호 : "+encPwd);

        decPwd = encPwd ^ key;

        System.out.println("복호화 후 비밀번호 : "+decPwd);
    }
}

 

실행 결과

정수값 num1 : 50, 110010
num1 >> 2 : 25, 11001
num1 << 2 : 100, 1100100
------------------
암호화 전 비밀번호 : 123456
암호화 후 비밀번호 : 438622501
복호화 후 비밀번호 : 123456

 

 

 

논리 연산자(Logical operators)

: true 혹은 false를 반환하는 연산자로 여러 조건을 만족하는지 체크하기 위한 용도로 if문 등에서 사용됩니다.

 

논리 연산자 의미 사용 예 결과
&& AND 연산, 양쪽이 모두 참인 경우에만 true 리턴을 합니다. A && B false
|| OR 연산, 양쪽중 한쪽만 참이어도 true 리턴을 합니다. A || B true
! 단항연산으로 NOT 연산 !A false

 

 

관계 연산자(Relational operators)

: 왼쪽과 오른쪽의 피연산자를 비교한 결과를 true, false로 리턴하는 연산자입니다. 보통 if, while문 등에서 수행조건을 체크하기 위해 사용합니다.

 

관계 연산자 의미
> 크다
>= 같거나 크다
< 작다
<= 같거나 작다
== 같다
!= 같지 않다