[효묘]초보Java 시리즈

[초보Java 시리즈]04-연산자(Operator)

배고픈상어-효묘 2020.02.13 조회 수 61 추천 수 2

04-1 연산자

우선 자바의 모든 연산자와 우선 순위를 적용한 표는 다음과 같습니다.

이 표는 절대로 외울 필요가 없으며, 필요할때마다 참고만 하시면 됩니다.

연산기호결합방향우선순위
( ), [ ], .->1(높음)
expr++, expr--<-2
++expr, --expr, _expr, -expr, !, ~, (type)<-3
*, /, %<-4
+, -->5
<<, >>, >>>->6
<, >, <=, >=, instanceof->7
==, !=->8
&->9
^->10
|->11
&&->12
||->13
? expr : expr<-14
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>>=<-15

결합 방향은 연산의 방향입니다.

예를 들어 x = 3-2*5-4라는 연산식이 있습니다. 

이 연산식은 연산자 우선순위에 따라 * 연산은 먼저 합니다.

x = 3 - ( 2 * 5 ) - 4

x = 3 - 10 - 4

이젠 우선순위에 따라 - 연산을 합니다.

결합방향은 -> 이므로 앞의 연산을 먼저 합니다.

x = ( 3 - 10 ) - 4

x = (-7) - 4

x = - 11

이젠 = 연산을 합니다. 결합 방향은 <- 입니다.

따라서 x 변수는 -11이라는 정수가 대입된다.

 

대입 연산자와 산술 연산자

 

연산자설명
=

연산자 우측의 연산값을 좌측 변수에 대입한다.

예) val = 20;

+

두 피연산자를 더한다

예) val = 3+4;

-

두 피연산자를 뺀다

예) val = 4-2;

*

두 피연산자를 곱한다

예) val = 5*7;

/

두 피연산자를 나눈다

예) val = 10/2;

%

왼쪽의 피연산자 값을 우측의 피연산자에 나누었을때의 나머지를 반환한다.

예) val = 7%5; // 결과는 2이다.

(여기서 반환이란, 연산의 결과를 뱉어낸다는 식이다.)

 

나누기(/) 연산자와 모듈러(%)연산자

다음 코드를 살펴봅시다.

package hyomyo;

public class HelloWorld {

	public static void main(String[] args) {
		System.out.println("7/5 = "+7/5);
		System.out.println("7.0f/5.0f = "+ 7.0f/5.0f);
		System.out.println("(float)7/5 = "+(float)7/5);
	}
}

((문자열 + 정수 혹은 연산값)은 문자열을 반환합니다. 따라서 이런식으로 연산값을 출력할 수 있습니다. 이는 String 클래스를 설명할 때 같이 설명하겠습니다.)

위 코드는 정수 7과 5를 나누는 여러가지 방식입니다.

위의 코드를 실행시켜보면 다음과 같은 결과가 나옵니다.

03760ebdaa8568499546ee4c9ed7ca96.JPG

첫 벗째 출력은 정수로 연산하여 소수점이 버려진 정수 1이 출력되었습니다.

두 번째 출력은 실수와 실수끼리 연산하여 실수가 출력되었습니다.

세 번째 출력은 (연산자 우선순위에 따라) 7을 float형으로 강제 형변환 한 후 나누기 연산을 시도했습니다. 이때 실수와 정수끼리 연산을 연산 방향에 따라 시도하는데, 서로 표현하는 방식이 달라서 5를 float로 자동 형변환 한 후 연산이 됩니다. 따라서 실수가 출력됩니다.

 

따라서 몫을 원할때는 int, 실수의 결과를 원할때는 float혹은 double을 이용하시면 됩니다.

 

나머지 연산자의 주의할 점이 있습니다. 기본적으로 나머지 연산자는 정수끼리로만 연산을 해야 의미가 있습니다..

 

package hyomyo;

public class HelloWorld {

	public static void main(String[] args) {
		System.out.println("7%5="+7%5);
		System.out.println("7.0f%5.2f="+7.0f%5.2f);
	}
}

 

첫 번째 출력은 7%5이니 나머지는 2입니다.

두 번째 출력은 7.0을 5.2로 나눈 나머지를 출력합니다. 하지만 이는 수학적으로 문제가 있습니다. 위키에서 나머지 연산을 찾아보면 모듈러 연산은 정수끼리의 연산만을 허락합니다.

 

복합(Compound) 대입 연산자

복합 대입 연산자는 불필요한 코드를 반복하지 않기 위해 존재하여 어려운 개념은 아닙니다.

x = x + y;

이 코드는 x+y의 연산값을 다시 x에 대입한다는 뜻입니다. 이를 복합 대입 연산자로 줄일 수 있습니다.

x+=y;

이는 +, -, /, *, %, &, ^ 등도 가능합니다.

 

관계 연산자

 

관계 연산자는 두 변수가 가리키는 값의 크기및 등등을 비교하여 boolean형 결과를 반환을 하는 연산자입니다.

7>5 같은 경우 오류가 없으니 true값을,

7<5 는 맞지 않으니 false값을 반환합니다.

연산자설명결합 방향
<, >

예) x < y

y가 x보다 더 큰가?

->
<=, >=

예) x<= y

y가 x보다 크거나 같나?

->
==

예) x == y

x와 y이 같나?

->
!=

예) x != y

x와 y가 다르나?

->

 

논리 연산자

논리 연산자 또한 true값과 false값중 하나를 반환한다. 기본적으로 자바는 논리합(or) 논리곱(and) 논리부정(not)을 제공한다. 논리 연산자를 처음 본 분들한테는 혼란스러울 수도 있지만 쉽게 비유하면, 내가 컴퓨터를 하는가? 그리고 동시에 (and 연산) 등을 굽히고 있는가?  정도 되겠습니다... 만약 위 예시가 참(true)이라면 등을 피라는 명령을 내릴 수 있고, false라면 다른 명령을 내릴 수도 있습니다. 

 

AND는 "~그리고~", OR는 "~혹은~" NOT은 "~이 아니면"이라고 생각하면 편합니다.

 

||(OR) 연산자. (|는 앤터 위, 혹은 Backspace 좌측에 \를 Shift를 누르면서 입력하면 됩니다.)

피연산자1피연산자2|| (OR)결과
truetruetrue
truefalseture
falsetruetrue
faslefalsefalse


boolean result = p || q;

&&(AND) 연산자.

피연산자1피연산자2|| (AND)결과
truetruetrue
truefalseflase
falsetruefalse
faslefalsefalse


boolean result = p && q;

!(NOT) 연산자

피연산자!(NOT)결과
truefalse
falsetrue


boolean result = !q;

04-3 비트 연산자

비트 연산자는 비트 단위로 연산을 한다. 비트 연산자의 피연산자는 반드시 정수여야한다.

[초보Java 시리즈]02편의 정수의 표현 방식을 읽어보면 쉽게 이해할수 있다. 

비트 연산을 이해하려면 정수를 이진수로 바꿔야한다.

byte b = 15 & 10;

위 코드를 이진수로 바꾸어 연산해보겠습니다.

89461bc3e448e45332b2313d70af9e1d.JPG

위의 그림처럼 연산이 진행됩니다.

 

| (or) 비트 연산자

비트1비트2연산 결과의 비트
111
101
011
000

& (and) 비트 연산자

비트1비트2연산 결과의 비트
111
100
010
000

^ (xor) 비트 연산자 (비트가 서로 다를때만 1을 반환)

비트1비트2연산 결과의 비트
110
101
011
000

 

~ (not) 비트 연산자

비트연산 결과의 비트
10
01

 

비트 연산자를 응용하여 [초보Java 시리즈]02의 정수의 음수 표현을 따라해볼 수 있습니다.

package hyomyo;

public class HelloWorld {

	public static void main(String[] args) {
		int num = 1234;
		int result = ~num + 1;
		System.out.println(result);
	}
}

 

비트 쉬프트 연산자 >>, <<, >>>

비트 쉬프트는 말 그대로 비트를 옮기는 연산입니다. 이 또한 모든 피연산자가 정수여야합니다.

연산자설명연산방향
<<

피연산자의 비트의 열을 왼쪽으로 이동. 이동에 의해 생긴 공백은 0으로 채움.

예)n<<2

->
>>

피연산자의 비트의 열을 오른쪽으로 이동한다. 피연산자가 음수일 경우 비트의 공백을 1로, 양수일 경우 0으로 채운다

예)n>>2

->
>>>

피연산자의 비트의 열을 오른쪽으로 이동. 공백은 0으로 채움

예)n>>>2

->

 

예를 들어, 0000 1010을 <<2 하면

0010 1000이 됩니다.


5개의 댓글

VersionKorea_
2020.03.12

자바는 말이 너무 길어요!

프리루트
2020.02.13

이런 글에는 또 추천을 빼먹을 수 없죠 b

@프리루트

갑사합니다 프리루트님! :p

초스터
2020.02.13

오늘은 연산자에 대한 내용이군요! 멋진 강좌네요 :D

@초스터

감사합니다!^^

컴공과 컴맹 효묘의 게시판

커뮤니티 운영자 : 배고픈상어 / 커뮤니티 한줄 소개를 입력해주세요

조회 수 제목 글쓴이
91 [[효묘]초보Java 시리즈] [초보Java 시리즈]05 - 조건문과 반복문 1 배고픈상어-효묘
71 [[효묘]잡다한 글] Java 코드 흰색 바탕 글자 오류 야매로 해결하는 법!! 배고픈상어-효묘
61 [[효묘]초보Java 시리즈] [초보Java 시리즈]04-연산자(Operator) 5 배고픈상어-효묘
75 [[효묘]잡다한 글] 안스로 앱만드는데.. 2 배고픈상어-효묘
74 [[효묘]초보Java 시리즈] [초보Java 시리즈]03-상수와 형 변환 2 배고픈상어-효묘
148 [[효묘]초보Java 시리즈] [초보Java 시리즈]02-변수(Variable)과 자료형(Data Type) 6 배고픈상어-효묘
347 [[효묘]초보Java 시리즈] [초보Java 시리즈]01-자바 시작하기 13 배고픈상어-효묘

한디포 자료란
사진이 없습니다.

스크립트

제가 앞으로 올릴 스크립트 강좌들!

hwanhee1

2020-08-03

0

https://www.koreaminecraft.net/files/thumbnails/643/909/001/262x150.crop.jpg

커맨드 블록

마인크래프트 커맨드 강좌 - 응용편 : timer 만들기!

Y_Lemon

2020-08-02

0