본문 바로가기

공부/TIL

23.10.13

JAVA 연산자에 대해

연산자에 대해 알아보자.

프로그래밍을 하다보면 여러 연산자를 사용해야 할 때가 온다.

기본적 연산자부터 알아보자.

 

<산술 연산자: +, -, *, /, %>

+ 연산자는 앞뒤의 피연산자를 더해주는 연산자.

-  연산자는 앞뒤의 피연산자를 빼주는 연산자.

* 연산자는 앞뒤의 피연산자를 곱해주는 연산자.

/ 연산자는 앞뒤의 피연산자를 나눠주는 연산자.

% 연산자는 앞의 피연산자를 뒤의 피연산자로 나누어 나온 나머지값을 출력하는 연산자.

또한 <<, >> 연산자가 있다.

<< 연산자는 비트를 <방향으로 밀어주는 연산을 한다. 이는 2진수로 이루어진 언어에서는 2배를 곱해준다고 생각하면 된다.

예를들어보자.

BYTE byte1 =6; // 1바이트의 값을 갖는 byte1변수의 값을 2진수로 표현하면, 00000110이 된다.

이를 <<연산자로 한번 밀어준다면 

byte1= byte1<<1; // 00000110을 1번 왼쪽으로 밀어주었으니, 00001100으로 변경 (이때 밀어주면서 생기는 공백은 0으로채움)

이때의값은 1100은 12니까 byte1값은 12로 초기화된다. 

마찬가지로 <<연산자로 두번 밀어주면

byte1 = 6; byte1=byte1<<2;// byte1변수를 다시 6으로 초기화 (00000110)해준 후 2번 밀어주면 (00011000)

값은24가 된다. 이는 6의 4배수. 이를 통해 << 연산자는 변수값을 밀어주는 만큼 2의 제곱의 형태의 곱을 해주는 연산자로  이용 할 수 있다.

이때 비트 연산자는 속도가 빨라 속도최적화에 도움이 된다고 한다.

 

>> 연산자는 위와같은 매커니즘으로 2의 제곱의 형태로 나누어주는 연산자로 이용 가능하다.

하지만 이때는 오른쪽으로 밀리면서 사라지는 비트들은 그냥 소멸이 되므로 마냥 나눗셈으로 이용할 수는없을 것 같다.

예를들어 

byte byte2 =7; //(00000111) 

맨 오른쪽 비트가 1인 이 변수를 >>으로 연산을 해주면

byte byte2 = byte2>>1; //  (00000111)이 (00000011)이 된다. (00000011)은 3.

7/2은 3이 아니기 떄문에 신경써서 사용해야할듯 하다. 이렇게 써보니 <<연산도 마찬가지로 신경써서 사용해야겠다.

 

<비교연산자 : <,>,<=,>=,==,!=,>

비교연산자는 결과값을 boolean의 형태로 나타낸다. 따라서 조건문 속에들어가서 사용하는데 많이 쓰인다.

수학적으로 직관적으로 다가오기 때문에 어려움이 없었다.

수학적으로 달랐던 것은 ==연산자와 !=연산자였다. 이 두 연산은 앞뒤의 피연산자를 같은지(==) 혹은 다른지(!=) 비교해주는 연산자다.

수학에서는 ==와 !=연산기호가 존재하지않지만,프로그래밍언에서 = 연산은 대입이기 때문에 ==연산과 !=연산을 나누어서 사용한다. <!=> 연산자를 사용할 때 주의해야할것은 false값이 나올때 <true>값을 반환한다는 것.

 

<논리연산자 : &&, ||,!>

논리연산자는 피연산자의 논리값을 비교하여 boolean의형태로 출력해주는 연산자.

&&연산자는 피연산자가 모두 true일때 true값을 반환한다.

||연산자는 피연산자 중 하나라도 true일 때 true값을 반환한다.

!연산자는 피연산자의 논리값을 반대로 반전시켜준다.

 

여담이지만 대학 전공공부를 하며 비트 연산으로 &와 |를 자주 사용했었다. 오랜만에 논리연산자를 공부하다가 그때 공부했던 비트 연산과 헷갈려 여기서 엉뚱하게시간을 낭비했다.. 그래도 여기서 한번 제대로 넘어져서 상기가 잘됐다.

 

<연산자 우선순위>

연산자 우선순위 : 산술 > 비교 > 논리 > 대입

산술 연산의 우선순위는 수학에서 배우는 사칙연산 우선순위를 따른다. 마찬가지로 괄호가 있다면 괄호가 우선순위가 올라간다. 두뇌풀가동 당하지않게 머릿속에 잘 담아두자.

 

 

 

 

 

 

 

'공부 > TIL' 카테고리의 다른 글

23.10.18  (0) 2023.10.18
23.10.17  (1) 2023.10.17
23.10.14(2)  (3) 2023.10.14
23.10.14  (1) 2023.10.14
2023.10.12 오늘 배운 것  (0) 2023.10.12