study/Java

[sist] 2023.12.28_Java : Operator(연산자), Radix(진수)

듀2 2024. 1. 28. 17:28

* Operator(연산자)

 - 연산에 사용되는 예약된 부호들.

 - 연산자에는 우선순위가 존재.

 - 문자열은 연산되지 않는다. ("10" - 문자열의 10, 10 - 정수의 10)

 

* 연산자의 우선순위

←  먼저 연산  / 나중 연산  →

                     

 최 단 산 쉬 관 리 삼 대 콤

 우 항 술 프 계      항 입     지

 선                               막

 

 1. 최우선 : ()

 2. 단항: ~, !, +, -, ++, --

 3. 산술: +, -, *, /, %

 4. 쉬프트: <<, >>, >>>

 5. 관계: >, <, >=, <=, ==, !=

 6. 논리: 일반 논리(&&, ||), 비트 논리(&, |, ^)

 7. 삼항(조건): ? :

 8. 대입: =, +=, -=, *=, /=, %=, <<=, >>=, >>>=, &=, |=, ^=

 


 

* Radix (진수)

 - 서로 다른 모양의 숫자 몇 개를 가지고 모든 수를 표현.

 - 코딩 창에는 10진수, 8진수, 16진수를 모두 사용할 수 있다.

 

 - 10진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

 - 8진수: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, ...

 - 16진수: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 11, 12, 13, 14, 15, ...

 - 2진수: 0, 1, ...

 

 * 코딩 창에서 진수를 사용하는 법)

 - 10진수(Decimal): 숫자

 - 8진수(Octal): 0숫자

 - 16진수(Hex): 0x숫자

 - 2진수(Binary)

 

 - 컴퓨터에서의 저장단위: byte

 

 - byte 하나로 값 저장(byte, boolean)

0000 0000

 

 - byte 두 개로 값 저장(short, char)

0000 0000 0000 0000

 

 - byte 네 개로 값 저장(int, float)

0000 0000 0000 0000 0000 0000 0000 0000

 

 - bit가 0이면 값이 아님, bit가 1이면 값

0000 0000

 최상위 부호 비트(sign bit) - 양수인지 음수인지?

 0 - 양수 / 1 - 음수

 * 각 bit는 지정된 수를 가진다. (첨자는 배로 올라간다.)

 

int i = 5;
0000 0000 0000 0000 0000 0000 0000 0101

 

 * method => 일

 - 입력된 int 형의 값을 2진수의 문자열로 얻는 일

 클래스명.method명으로 호출할 수 있다.

 

 사용법)

 int i = 30;
 Integer.toBinaryString(i);  // 1. 30을 입력받아
               			// 2. 2진수의 문자열로 변환하여
 				// 3. 결과를 내보낸다. -> 11110

 

 * 8진수를 2진수로 변환

 - 숫자 하나를 첨자 4 2 1인 비트로 변환하여 2진수로 기록, 비어있는 부분은 0으로 채운다.

 

 * 16진수를 2진수로 변환

 - 숫자 하나를 첨자 8 4 2 1인 비트로 변환하여 2진수로 기록, 비어있는 부분은 0으로 채운다.

 

 * 2진수 음수 표현

 - 보수법을 사용

 


 

1. 단항 연산자 (unary)

 - 연산에 필요한 항이 하나인 연산자: ~, !, +, -, ++, --

 사용법)

 연산자 대상체(변수, 상수);

 

 ~ : tilde - 1의 보수연산

 사용법) ~12 => -13 / ~-12 => 11

 ~ 양수: 부호 변경 1 증가

 ~ 음수: 부호 변경 1 감소

 

 ! : not -> true => false, false => true 변경

 true나 false 앞에만 사용 가능

 사용법)

 !(3 > 4) => true : false 앞에 !이 붙어서 true

    false : 3이 4보다 클 수 없으므로

 

 boolean flag = true;

 !flag => false가 나온다.

 

 + : 형식적인 제공

 +9 => 9, +-9 => -9

 

 - : 2의 보수 연산(부호 변경 연산) - 값은 그대로 두고 부호만 변경.

 2023(양수의 2023)앞에 -을 붙이면 -2023 (음수 2023)

 

 ++ : 증가 연산, -- : 감소 연산

 - 변수에만 사용할 수 있다.

 - 대상체의 값을 1씩 증가시키거나, 대상체의 값을 1씩 감소시키는 일.

 사용법)

 전위연산 : 연산자 대상체;

                            대상체 연산자; 후위연산

 * 단독으로 사용되면 대상체의 값을 1씩 증가시키거나, 1씩 감소시키는 일을 잘 수행한다.

 int i = 100;
 ++i; // 100 -> 101
 i++; // 101 -> 102

 

 * 대입 연산자와 함께 사용되면 전위와 후위는 다른 값을 대입해준다.

  (method의 parameter로 값을 할당하는 경우에도 동일)

  - 전위: 내 것 먼저(증가, 감소연산 후 대입)

  - 후위: 남의 것 먼저(대입 후 증가, 감소연산 수행)

  => 전위와 후위 연산을 사용할 때 다른 값이 할당될 수 있으므로 주의!!

 

 * 전위

 int i = 12;
 int result = 0;
 result = ++i; // 1. 대상체의 값을 증가시킨다. 12 -> 13, 2. 증가된 값을 할당한다.

 -> i와 result의 값이 같다.

 

 * 후위

 int i = 12;
 int result = 0;
 result = i++; // 1. 대상체 값을 할당한다. 12, 2. 대상체의 값을 증가시킨다. 12 -> 13

 -> i와 result의 값이 다르다.

 

2. 산술 연산자

 : +, -, *, /, %(나눈 나머지를 구할 때, 10 % 2 = 0, 큰 수를 몇 가지의 가짓수로 만들어낼 때 사용, 2023 % 3 = 0, 1, 2)

 대상체 연산자 대상체

 

3. 쉬프트 연산자 (비트밀기 연산)

 : <<, >>, >>>

 << (left shift) : 비트를 왼쪽으로 밀고, 밀어서 빈칸을 항상 0으로 채운다.

 >> (right shift) : 비트를 오른쪽으로 밀고, 밀어서 빈칸을 최상위 부호비트에 따라 양수면 0을 채우고, 음수면 1을 채운다.

 >>> (unsigned right shift) : 비트를 오른쪽으로 밀고, 밀어서 빈칸을 항상 0으로 채운다.

 

 사용법)

 대상체 연산자(비트를 밀 방향) 밀칸수

 

 

 4. 관계연산자

>, <, >=, <=, ==(같다: 같을 때 true, 다르면 false), !=(다르다: 다를 때 true, 같을 때 false)

  - (대소비교): 결과가 boolean(true, false)으로 나온다.

 

 5. 논리연산자

  - 일반논리: 여러 개의 관계연산자를 붙여서 비교해야 할 때

  && (AND) : 전항과 후항이 모두 true일 때만 true 반환

  || (OR) : 전항과 후항이 모두 false일 때만 false 반환

 

 사용법)

 관계연산자 일반논리연산자 관계연산자

728x90