본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 2일차(형변환, 이항연산자, 대입연산자 및 산술연산자, 관계연산자, 논리연산자, 전위·후위 연산자, 비트 연산자, 비트 쉬프트 연산자)

이것은 제가 기억하기 위한 노트입니다. 혹시 질문이 있으신분은 댓글 달아주세요.

저도 시작하는 입장이지만.. 열심히 찾거나 같이 공부해서 알려드릴 수 있으면 좋겠습니다.

마지막에 질문사항이 있는데 아시는 분 말씀좀 부탁드립니다 ㅠ.ㅠ

자동 형변환

- 자료형의 크기가 큰 방향으로 형 변환이 일어난다.

- 자료형의 크기에 상관없이 정수 자료형보다 실수 자료형이 우선한다.

- byte > short + char > int > long > float > double

명시적 형변환

- 기본적으로 JAVA는 정수형 계산을 int형으로 계산한다.

short num1 = 1;

short num2 = 2;

short num3 = num1 + num2 // 컴파일 오류가 발생한다.

그러므로 short num3 = (short) (num1 + num2) 혹은 int num3 = num1 + num2 로 변환하여야 한다.

 

이항 연산자

연산기호

결합방향

우선순위

[], .

>

1

expr++, expr--

<

2

++expr, --expr, +expr

<

3

*, /, %

>

4

+, -

>

5

<<, >>, >>>

>

6

<, >, <=, >=. instance of

>

7

==, !=

>

8

&

>

9

^

>

10

|

>

11

&&

>

12

||

>

13

? expr : expr

<

14

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

<

15

 

대입 연산자와 산술연산자

연산자

연산자의 기능

결합방향

=

연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입

예) val = 20;

<

+

두 피연산자의 값을 더한다.

>

-

왼쪽의 피연산자 값에서 오른쪽의 피 연산자 값을 뺀다.

>

*

두 피연산자의 값을 곱한다.

>

/

왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눈다.

>

%

왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환한다.

>

 

 

 

관계연산자

연산자

연산자의 기능

결합방향

<

n1 < n2 : n1이 n2보다 작은가?

>

>

n1 > n2 : n1이 n2보다 큰가?

>

<=

n1 <= n2 : n1이 n2보다 같거나 작은가?

>

>=

n1 >= n2 : n1이 n2보다 같거나 큰가?

>

==

n1 == n2 : n1과 n2가 같은가?

>

!=

n1 != n2 : n1과 n2가 다른가?

>

 

논리연산자

연산자

연산자의 기능

결합방향

&&

A && B 모두 True 이면 결과는 True (AND)

>

||

A || B 둘 중 하나라도 True 이면 결과는 True(OR)

>

!

!A 연산결과는 A가 true이면 false, A가 false이면 True(NOT)

<

※ 논리연산자 사용 시 주의할 점 SCE(Short-Circuit Environment)

앞 연산자의 결과가 정답이라면(True 든 false 든 간에) 뒤에는 수행을 안하므로 +, - 등과 같은 사칙연산을 적용하지 않는다. 그러므로 애초에 변수에 변경사항을 적용하고 결과값만 비교기준과 비교하는 것이 좋다.

 

Prefix ++ --

연산자

연산자의 기능

결합방향

++

피연산자에 저장된 값을 1 증가 / val = ++n;

<

--

피연산자에 저장된 값을 1 감소 / val = --n;

<

 

Postfix ++ --

연산자

연산자의 기능

결합방향

++

피연산자에 저장된 값을 1 증가 / val = n++;

<

--

피연산자에 저장된 값을 1 감소 / val = n--;

<

 

비트 연산자

연산자

연산자의 기능

결합방향

&

비트 단위로 AND 연산 n1 & n2

>

|

비트 단위로 OR 연산 n1 | n2

>

^

비트 단위로 XOR 연산 n1 ^ n2

>

~

피연산자의 모든 비트를 반전시켜서 얻은 결과 반환 ~n

<

AND 는 양 비트가 모두 1일 때 1, 혹은 모두 0일 때 0을 반환한다.

OR 은 양 비트 중 하나라도 1이면 1을 반환한다.

^ 은 비트가 서로 같으면 0, 다르면 1을 반환한다.

~ 은 비트를 반전시킨다.

 

비트 쉬프트 연산자

연산자

연산자의 기능

결합방향

<<

피연산자의 비트 열을 왼쪽으로 이동

이동에 따른 빈 공간은 0으로 채움 예) n << 2

>

>>

피연산자의 비트 열을 오른쪽으로 이동

이동에 따른 빈 공간은 음수의 경우 1, 양수의 경우 0으로 채움

예) n >> 2;

>

>>>

피연산자의 비트 열을 오른쪽으로 이동

이동에 따른 빈 공간은 0으로 채움

예) n >>> 2;

>

 

비트 쉬프트 연산자 예시 코드

num = 2는 byte 형 비트로 00000010 이다.

이것을 << 1 칸 밀면 맨 왼쪽의 0이 탈락되고 왼쪽으로 한칸씩 모두 이동한다.

그리고 빈 bit(오른쪽) 공간에는 0이 들어온다.

그러므로 00000100 , 4 가 나오는 것이다.

num = 8 는 byte 형 비트로 00001000 이다.

이것을 >> 1 칸 밀면 맨 오른쪽의 0이 탈락되고 오른쪽으로 한칸씩 모두 이동한다.

그리고 빈 bit 공간(왼쪽)에는 양수의 경우이므로 0이 들어온다.

그러므로 00000100, 4 가 나오는 것이다.

num = -8 는 byte 형 비트로 11111000 이다.

비트 8의 1의 보수(반전)를 한 후 1을 더하면 음의 값이다. 그러므로 11111000이 된다.

여기서 >> 1칸 밀면 맨 오른쪽의 0이 탈락되고 오른쪽으로 한칸씩 모두 이동한다.

그리고 빈 bit 공간(왼쪽)에는 음수의 경우이므로 0이 들어온다.

그러므로 11111100, -4가 되는것이다.

질문사항

번외로 num = -8; 선언을 한 후

num >>> 1을 했는데 -4가 나왔습니다.

원래라면 음,양수의 관계없이 빈 공간을 0으로 채워야 하는데.. 왜 안채우는 지 모르겠습니다.

아시는 분은 답변 부탁드립니다 ㅠ.ㅠ (이클립스에서 했습니다.)