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 |