반응형
dackyy
대기의 연대기
dackyy
전체 방문자
오늘
어제
  • 분류 전체보기 (49)
    • java (7)
    • 코딩테스트 (23)
    • python (10)
    • Network (2)
    • Web (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 비교 연산자
  • 배열생성
  • 비트 연산자
  • 제어문
  • 조건문
  • 시프트 연산자
  • 참조 자료형
  • 기본 자료형
  • https
  • 반복문
  • 증감 연산자
  • 산술 연산자
  • 논리 연산자
  • java
  • 자료형
  • 배열
  • TLS
  • switch
  • 연산
  • SSL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dackyy

대기의 연대기

[JAVA] 연산자의 종류
java

[JAVA] 연산자의 종류

2022. 7. 9. 17:56
반응형

자바의 연산자는 연산 결과의 특징에 따라 3가지로 나눌 수 있다.

  1. 연산 결과가 특정값이 나오는 산술, 증감, 비트, 시프트 연산자
  2. 연산 결과가 참(true)와 거짓(false) 중 하나의 값으로만 나타내는 비교, 논리 연산자
  3. 값을 반환하는 것이 아닌 값을 대입하는 의미를 지닌 대입 연산자와 삼항 연산자가 있다.
자료형 연산 기호 기능  결과
산술 연산자 +, -, *, /, % 사칙연산 및 나머지 연산 값
증감 연산자  ++, -- 값이 1씩 증가 및 감소   
비트 연산자  &, |, ~, ^ 비트 AND, OR, NOT, XOR  
시프트 연산자  >>, <<, >>> 비트 단위의 이동  
비교 연산자  <, >, <=, >=, ==, != 값의 크기 비교 참 또는 거짓
논리 연산자 &&, ||, !, ^ 논리 AND, OR, NOT, XOR  
대입 연산자 =, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>= 산술 연산 결과의 대입
('연산자' + '='의 축약 표현)
실행
삼항 연산자 참 또는 거짓 ? x : y 참일때 x, 거짓일 때 y  

연산자의 연산 방법

1. 산술 연산자와 증감 연산자

산술 연산자는 사장 기본적인 연산자로, 사칙연산과 나머지연산( % ) 이 있다. 이중 정수 / 정수 형태의 연산을 할때 주의 해야 한다.

int / int 의 결과는 int 이므로 5 / 2 의 값은 2.5가 아니라 2 이다. 즉 '정수 / 정수' 의 결과는 나눗셈의 몫이다. 

이와 달리 나머지 연산 ( % ) 은 말 그대로 나누기를 수행한 이후의 나머지를 나타내는데, 이를  '모듈로 연산' 이라고 한다.

 

증감 연산자 ( ++, -- ) 는 변수 값을 1씩 증가 또는 감소 시킨다. a++의 의미는 a = a+1 과 동일하며 현재 a값을 1 증가시켜 다시 a에 저장하라는 의미이다.

증감 연산자는 전위형과 후위형으로 나뉘는데 둘의 차이는 실행의 우선순위이다.

전위형은 다른 모든 명령보다 먼저 실행되고, 후위형은 가장 나중에 실행된다.

int num1 = 3;
int num2 = ++num1; 		// num1 값에 1을 더한 후 대입 (전위형)
System.out.println(num1)	// 4
System.out.println(num2)	// 4

int num3 = 3;
int num4 = num1++; 		// num1 값을 대입후 num1에 1을 더하기 (후위형)
System.out.println(num1)	// 4
System.out.println(num2)	// 3

2. 비트 연산자

비트 연산자는 말 그대로 비트단위의 연산자로 AND( & ), OR( | ), XOR( ^ ), NOT( ~ )이 있다.

비트 AND은 두 값이 모두 1일때만 1인 연산자, 비트 OR은 두값이 모두 0일 때만 0인 연산자다.비트 XOR은 두 값이 같을 떄 0, 다를 때 1 인 연산자이며, 비트 NOT 은 0은 1 , 1은 0으로 반전하는 연산자다.

값1 값2 AND ( & ) OR ( | ) XOR ( ^ )
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
값 NOT ( ~ )
0 1
1 0

이는  코드에서도 적용된다.

// AND 연산
System.out.println(3 & 10)			// 2
System.out.println(0b00000011 & 0b00001010)	// 2

// OR 연산 
System.out.println(3 | 10)			// 11
System.out.println(0b00000011 | 0b00001010)	// 11

// XOR 연산
System.out.println(3 ^ 10)			// 9
System.out.println(0b00000011 ^ 0b00001010)	// 9

// NOT 연산 
System.out.println(~3)				// -4	
System.out.println(~0b00000011)			// -4

3. 시프트 연산자

시프트 연산자는 비트의 위치를 좌우로 이동하는 연산으로, 산술 시프트 ( <<, >> )  와 논리 시프트 ( >>> ) 가 있다.

산술 시프트는 숫자의 부호 비트는 유지하면서 나머지 비트를 왼쪽, 오른쪽으로 이동하는 연산자 이다.

<< 연산을 수행하면 부호비트를 제외한 나머지 전체 비트가 왼쪽으로 이동하므로 1bit 이동할때마다 X2의 효과가 있다.

반면 >>연산을 수행하면 부호 비트를 제외한 나머지 전체 비트가 오른쪽으로 이동하므로 이동할때마다 ÷2의 효과가 있다.

양수와 음수의 연산 결과에는 차이가 있는데, 양수는 X2가 그대로 유지되는 반면, 음수는 소수를 버리거나 올리게 된다. 

이는 최하위 비트값이 시프트 과정에서 삭제되기 때문이다.

연산자 부호 특성 예
<< 양수, 음수 1bit 시프트당 X 2 , 부호 유지 3 << 1 = 6
-3 >> 1 = -6
>> 양수 1bit 시프트당 / 2 , 부호 유지,
소수 내림
5 >> 2 = 1
음수 1bit 시프트당 / 2, 부호 유지,
소수 올림
- 5 >> 2 = -2
// <<
System.out.println(3 << 1);		// 6
System.out.println(3 << 1);		// -6

// >>
System.out.println(5 >> 1);		// 2
System.out.println(5 >> -1);		// -3

// 논리 시프트
System.out.println(3 >>> 1);		// 1
System.out.println(-3 >>> 31);		// 1

4. 비교 연산자

비교 연산자는 크기를 비교하는 연산자( <, >, <=, >= )와 등가를 비교하는 연산자 ( ==, != ) 로 나눌 수 있다. 

연산결과는 true 와 false 중 하나를 나타낸다.

참고로 등호 ( = ) 를 포함한 2개의 연산 부호가 연결 됐을 때 등호는 항상 오른쪽에 위치한다.

int a = 5;
int b = 2;
int c = 5;

System.out.println(a == b);		// false
System.out.println(a != b);		// true
System.out.println(a < c);		// false
System.out.println(a > b);		// true
System.out.println(a <= b);		// false
System.out.println(a >= c);		// true

//참조 자료형 등가 비교
String str1 = new String("hi");
String str2 = new String("hi");
System.out.println(str1 == str2);		//false
System.out.println(str1.equals(str2);		//true

참조 자료형도 등가를 비교할 수 있는데 이는 스택메모리 값을 비교하기 때문에 두 문자열을 비교하기 위해선 .equals( ) 메서드를 사용해야 한다.

5. 논리 연산자

논리 연산자는 비트 연산자와 매우 비슷하지만, 피연산자로 불리언값만 올 수 있고, 연산 결과 또한 불리언 타입만을 지닌다.

논리 AND( && ) 는 두 값이 모두 true일 때만 true, 나머지는 모두 false 값을 지닌다

논리 OR( || ) 는 두 값이 모두 fasle 일 때만 false 이며 나머지는 모두 true 값을 가진다. 

논리 XOR( ^ )은 두 값이 다를 때는 true, 같을 때는 false 의 결과를, 

논리 NOT( ! )은 true 와 false 를 반전시키는 연산자이다.

값1 값2 AND ( &&) OR ( || ) XOR ( ^ )
false false false false false
false true false true true
true false false true true
true true true true false
값  NOT( ! )
false true
true  false

비트 연산자의 0과 1값의 연산 과정을 논리 연산자의 false와 true 에 대응해 생각하면 매우 비슷하다.

반응형

'java' 카테고리의 다른 글

[JAVA] 야구게임 맞추기  (0) 2022.07.30
[JAVA] 배열의 생성과 자료형  (0) 2022.07.09
[JAVA] 제어문  (1) 2022.07.09
[JAVA] 기본 자료형간의 타입변환, 연산  (0) 2022.07.09
[JAVA] 자바의 자료형 (Data Type)  (0) 2022.07.09
    'java' 카테고리의 다른 글
    • [JAVA] 배열의 생성과 자료형
    • [JAVA] 제어문
    • [JAVA] 기본 자료형간의 타입변환, 연산
    • [JAVA] 자바의 자료형 (Data Type)
    dackyy
    dackyy

    티스토리툴바