study gomi

Java Day8 연산자 본문

basic/java

Java Day8 연산자

공부하곰 2024. 2. 23. 04:01
728x90
반응형

연산자

- 상수나 변수 값을 조작 할 수 있도록 해주는 것이 연산이다.

- 어떠한 연산을 할 것인지를 기호로 사용하는 것이 연산자.

- 일반적인 산수에서 사용하는 4칙 연산 외에 프로그래밍에서 특별하게 사용하는 연산자도 있다.

- 연산자 우선 순위가 있다.

 

최우선 연산자

- . : 메모리에 생성된 객체의 멤버에 접근 / 특정 매개체의 하위에 접근할 때 사용

- [ ] : 배열에서 요소에 접근하고자 할 때 사용

- ( ) : 수식에서 연산의 우선 순위를 조정하고자 할 때 사용

int a1 = 1 + 2 * 3;
System.out.println(" 1 + 2 * 3 = " + a1);

int a2 = (1 + 2) * 3;
System.out.println("(1 + 2) * 3 = " + a2);

 

단항 연산자

- ! : true를 false로 false를 true로

- ~ : 숫자의 비트를 0은 1로, 1은 0으로

- +, - : 숫자의 부호를 결정

- ++, -- : 값을 1 증가시키거나 감소 시키는 연산자 (전위형)

- (cast) : 값의 타입을 변경할 때 사용

boolean bool3 = true;
System.out.println("bool3 : " + bool3);
System.out.println("!bool3 : " + !bool3);

int i1 = 100;
// 숫자를 이진수로 변환 후 문자열 형태로 전달
System.out.printf("i1 : %32s\n", Integer.toBinaryString(i1));
System.out.printf("~i1 : %32s\n", Integer.toBinaryString(i1));

// 양수 값을 음수로 전환하는 방법
// 2의 보수의 방법: 100의 절대값을 2진수로 구하고 비트 다 뒤집고 +1
System.out.println(~i1); // 실행결과 : -101
System.out.println(~i1 + 1); // 실행결과 : 100

// 부호 연산자
System.out.println(+i1);
System.out.println(-i1);

// 증감 연산자
System.out.println("++i1 : " + ++i1);
System.out.println(i1);

System.out.println("--i1 : " + --i1);
System.out.println(i1);

// 캐스트
i1 = 214712458;
// short short3 = i1; // Error
short s1 = (short) i1;
long l1 = i1;
System.out.println(l1);
System.out.println(s1); // 엉뚱한 값 출력 됨.

 

산술 연산자

- +, -. *, / : 일반적인 4 칙 연산

- % : 나머지를 구하는 연산자

// 산술 연산자
System.out.println("100 + 200 = " + (100 + 200));
System.out.println("100 - 200 = " + (100 - 200));
System.out.println("100 * 200 = " + (100 * 200));
System.out.println("100 / 200 = " + (100 / 200));
System.out.println("100 % 200 = " + (100 % 200));

// 문자열 + 숫자형 혹은 숫자형 + 문자형
// 문자열과 숫자형이 만나면 뒤 숫자형이 문자열로 바뀜(문자열과 더하기 때문.)
System.out.println("100" + 200 + 300); //100200300이 출력
System.out.println(100 + 200 + "300"); // 300300이 출력

 

시프트 연산자

- << : 비트를 왼쪽으로 이동시켜주는 연산

- >> : 비트를 오른쪽으로 이동시켜주는 연산 (부호 유지)

- >>> : 비트를 오른쪽으로 이동시켜주는데 무조건 0으로 채워짐.

더보기

숫자 >> 1

0000 1000 -> 0000 0100

1000 1000 -> 1100 0100

 

1 << 숫자

0000 1000 -> 0001 0000

 

숫자 >>> 1 

0000 1000 -> 0000 0100

1000 1000 -> 0100 0100

// 시프트 연산자
// 오른쪽 시프트는 나누기 2의 효과가 있다.
// 오른쪽 시프트 3번은 나누기 8(2 * 2 * 2)의 효과가 있다.
System.out.printf("%32s %d\n", Integer.toBinaryString(100), 100); // 정수 100을 이진수로 출력
System.out.printf("%32s %d\n", Integer.toBinaryString(100 >> 1), 100 >> 1);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 >> 2), 100 >> 2);

System.out.println();

// 우측 시프트는 곱하기 2의 효과가 있다.
System.out.printf("%32s %d\n", Integer.toBinaryString(200), 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(200 << 1), 200 << 1);
System.out.printf("%32s %d\n", Integer.toBinaryString(200 << 2), 200 << 2);

System.out.println();

System.out.printf("%32s %d\n", Integer.toBinaryString(-100), -100);
System.out.printf("%32s %d\n", Integer.toBinaryString(-100 >> 1), -100 >> 1);
// 암호화 모듈 등 특별한 상황에서 사용.
System.out.printf("%32s %d\n", Integer.toBinaryString(-100 >>> 1), -100 >>> 1);

 

관계 연산자

- > : 좌측의 값이 우측의 값보다 크면 true, 작거나 같으면 false

- < : 좌측의 값이 우측의 값보다 작으면 true, 크거나 같으면 false

- >= : 좌측의 값이 우측의 값보다 크거나 같으면 true, 작으면 false

- <= : 좌측의 값이 우측의 값보다 작거나 같으면 true, 크면 false

- == : 좌측의 값과 우측의 값이 같으면 true, 다르면 false

- != : 좌측의 값과 우측의 값이 다르면 true, 같으면 false

// 관계 연산자
System.out.println("100 > 10 : " + (100 > 10));
System.out.println("100 < 10 : " + (100 < 10));
System.out.println("100 >= 10 : " + (100 >= 10));
System.out.println("100 <= 10 : " + (100 <= 10));
System.out.println("100 != 10 : " + (100 != 10));

 

비트 연산자

- & : 두 수를 2진수로 변환한 후 각 자리를 비교하여 둘 다 1일 경우만 1이 되는 연산자

- | : 두 수를 2진수로 변환한 후 각 자리를 비교하여 둘 중에 하나라도 1이면 1이 되는 연산자

- ^ : 두 수를 2진수로 변환한 후 각 자리를 비교하여 두 비트가 같으면 0, 다르면 1이 되는 연산자

더보기

1000 1000 & 0000 1000 = 0000 1000

1000 1000 | 0000 1000 = 1000 1000

1000 1000 ^ 0000 1000 = 1000 0000

// 비트 연산자
System.out.printf("%32s %d\n", Integer.toBinaryString(100), 100);
System.out.printf("%32s %d\n", Integer.toBinaryString(200), 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 & 200), 100 & 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 | 200), 100 | 200);
System.out.printf("%32s %d\n", Integer.toBinaryString(100 ^ 200), 100 ^ 200);

 

논리 연산자

- && : 연산자를 기준으로 좌측과 우측에 관계 연산자가 있을 경우 두 값이 모두 true이면 true, 하나라도 false이면 false를 반환. 

- & : 기본적인 연산은 &&와 같지만 좌측 연산 결과 값이 false라고 하더라도 이 후의 연산을 모두 수행.

- || : 연산자를 기준으로 좌측과 우측에 관계 연산자가 있을 경우 두 값 중 하나라도 true면 true, 둘 다 false라면 false를 반환한다. 

- | : 기본적인 연산은 ||와 같지만 좌측 연산 결과 값이 true라고 하더라도 이후의 연산을 모두 수행.

더보기

&&는 좌측의 연산 결과 값이 false라면 이후의 연산은 수행하지 않고 false를 반환.

 

|| 는 좌측의 연산 결과 값이 true라면 이후의 연산은 수행하지 않고 true를 반환.

// 논리 연산자
System.out.println(true && true);
System.out.println(true && false);
System.out.println(false && false);
System.out.println(false && true);

System.out.println(2 > 1 && 3 > 2);
System.out.println(2 > 1 && 3 < 1);
System.out.println(2 < 1 && 3 > 2);
System.out.println(2 < 1 && 3 < 2);

System.out.println(true || true);
System.out.println(true || false);
System.out.println(false || true);
System.out.println(false || false);

int k1 = 100;
int k2 = 200;
System.out.println(++k1 > 100 && ++k2 > 200);
System.out.println(k1 + " " + k2);

k1 = 100;
k2 = 200;
// &&는 앞의 조건이 false면 뒤의 계산은 하지 않는다.
System.out.println(++k1 < 100 && ++k2 > 200);
System.out.println(k1 + " " + k2); // k2는 200

k1 = 100;
k2 = 200;
// &는 앞의 조건이 false라도 뒤의 계산까지 다 한다.
System.out.println(++k1 < 100 & ++k2 > 200);
System.out.println(k1 + " " + k2);

k1 = 100;
k2 = 200;
// ||는 앞이 참이면 뒤의 연산은 하지 않는다.
System.out.println(++k1 > 100 || ++k2 > 200);
System.out.println(k1 + " " + k2);

k1 = 100;
k2 = 200;
// |는 앞이 참이어도 뒤의 연산을 끝까지 한다.
System.out.println(++k1 > 100 | ++k2 > 200);
System.out.println(k1 + " " + k2);

 

삼항 연산자

- 조건항? 항1 : 항2

- 조건항의 결과 값이 true면 항1, false면 항2를 반환.

int k3 = 10 > 20 ? 100 : 200;
System.out.println(k3);

 

배정 대입 연산자

- =, +=, -=, *=, /= %=, <<=, >>=, ^=, &=, !=

// 배정대입연산자
k1 = 100;
k2 = 100;
System.out.println((k1 += 2) + " " + (k2 = k2 + 2));
System.out.println((k1 /= 2) + " " + (k2 = k2 / 2));

 

후위형 증감 연산자

- --, ++ : 자기 자신의 값을 하나 증가하거나 감소

- 기본적으로 전위형 증감 연산자와 같지만 전위형은 연산작업을 수행 후 값을 전달하지만, 후위형은 값을 전달한 후 연산을 수행한다.

// 후위형 증감연산자
k1 = 100;
k2 = ++k1;
System.out.println(k1 + " " + k2);

k1 = 100;
k2 = k1++;
System.out.println(k1 + " " + k2);
728x90
반응형