java&spring

[Java] 연산자 모음

sungjine 2017. 1. 8. 01:06
반응형

* 연산자 종류

    1. 산술 연산자 +, -, /, *, %

    2. 대입 연산자 =

    3. 복합 대입 연산자 +=, -=, /=, *=, %=, &=, |=, ^=

    4. 증감 연산자 ++, --

    5. 비교 연산자 ==, !=, >, <, <=, >=, instanceof, equals

    6. 비트 연산자 &, |, ^, ~

    7. 시프트 연산자 >>, >>>, <<

    8. 논리 연산자 &&, ||

 

1. 산술 연산자

    - ex) int, long

    1 + 1 = 2  더하기

    1 - 1 = 0  빼기

    1 / 1 = 1  나누기

    1 * 1 = 1  곱하기

    1 % 2 = 1  나머지

 

    - ex) float, double(int, long과 float, double을 같이 연산하면 소수점 까지 나온다.)

    1.0 + 1.0 = 2.0

    1.0 - 1.0 = 0.0

    1.0 / 1.0 = 1.0

    1.0 * 1.0 = 1.0

    1.0 % 1.0 = 0.0

    1 + 1.0 = 2.0

    1 - 1.0 = 0.0

    1 / 1.0 = 1.0

    1 * 1.0 = 1.0

    1 % 1.0 = 0.0

 

    - 문자열과 연산 : +연산 외에는 에러가 난다. +연산시 문자열이 된다.

    "1" + 1 = "11"

 

2. 대입 연산자

    int a = 2;  변수 a에 2를 대입한다.

 

3. 복합 대입 연산자

    a += b -> a = a + b

    a -= b -> a = a - b

    a /= b -> a = a / b

    a *= b -> a = a * b

    a %= b -> a = a % b

    a &= b -> a = a & b

    a |= b -> a = a | b

    a ^= b -> a = a ^ b

 

4. 증감 연산자

    ++a -> 1을 더한 후 사용

    int a = 1;

    System.out.println(++a);  // 2

    a++ -> 사용 후 1을 더함

    int a = 1;

    System.out.println(++a);  // 1

    System.out.println(a);  // 2

 

    --도 ++와 사용법은 같다.

 

5. 비교 연산자

    < a와 b가 숫자이고 a 연산자 b 일 때의 비교 >

    1 == 1 -> true, 1 == 2 -> false  // 같은 수인지 비교

    1 != 2 -> true, 1 != 1 -> false  // 같은 수가 아닌지 비교

    2 > 1 -> true, 1 > 1 -> false, 1 > 2 -> false  // 초과

    1 < 2 -> true, 1 < 1 -> false, 2 < 1 -> false  // 미만

    2 >= 1 -> true, 1 >= 1 -> true, 1 >= 2 -> false  // 이상

    1 <= 2 -> true, 1 <= 1 -> true, 2 <= 1 -> false  // 이하

 

    < 변수가 객체의 인스턴스인지 비교 >

    Integer b = new Integer(1);

    b instanceof Integer -> true, b instanceof Long -> false

 

    < 문자열이 같은지 비교 >

    "a".equals("a") -> true, "a".equals("b") -> false // 문자열이 객체이기 때문에 == 으로 비교하면 안된다.

 

6. 비트 연산자

    int a = 120, b = 240;

    a의 비트 = 0 1 1 1 1 0 0 0

    b의 비트 = 1 1 1 1 0 0 0 0

    & : 논리곱 -> 두 비트가 1 이면 1 아니면 0

    a & b = 112

    a & b 연산 후 비트 = 0 1 1 1 0 0 0 0

    | : 논리합 -> 두 비트가 0이면 0 아니면 1

    a | b = 248

    a | b 연산 후 비트 = 1 1 1 1 1 0 0 0

    ^ : 배타적 논리합 -> 두 비트가 같으면(1,1 / 0,0) 0 아니면 1

    a ^ b = 136

    a ^ b 연산 후 비트 = 1 0 0 0 1 0 0 0

    ~ : 1의 보수

    ~a = -121

 

7. 시프트 연산자

    a = 65;

    b = 129;

    c = -64;

    a의 비트 = 1 0 0 0 0 0 0 1

    b의 비트 = 0 1 0 0 0 0 0 1

    c의 비트 = 1 1 0 0 0 0 0 0

    a >> b -> a를 b만큼 비트를 오른쪽으로 움직인다. 새로운 비트는 0을 추가한다. (음수일 경우 부호비트가 고정이다.)

    a >> 1 -> 32

    a >> 1 연산 후 비트 -> 0 0 1 0 0 0 0 0

    b >> 1 -> 64

    b >> 1 연산 후 비트 -> 0 1 0 0 0 0 0 0

    c >> 1 -> -32

    c >> 1 연산 후 비트 -> 1 0 1 0 0 0 0 0

 

    a >>> b -> a를 b만큼 비트를 오른쪽으로 움직인다. 새로운 비트는 0을 추가한다. (음수일 경우 부호비트도 움직인다.)

    a >>> 1 -> 32

    a >>> 1 연산 후 비트 -> 0 0 1 0 0 0 0 0

    b >>> 1 -> 64

    b >>> 1 연산 후 비트 -> 0 1 0 0 0 0 0 0

    c >>> 1 -> 2147483616

    c >>> 1 연산 후 비트 -> ........

 

    % 주의점 %

    위에서 c >>> 1을 했는데 값이 크게 나오는 이유는 시프트 연산을 할 때 int 형 즉 32비트로 연산이 되기 때문이다. 그래서 임의로 형변환을 한다면 원치않는 값이 나올 수 있다.

 

    a << b -> a를 b만큼 비트를 왼쪽으로 움직인다. 새로운 비트는 0을 추가한다.

    a << 1 -> 130

    a << 1 연산 후 비트 -> 1 0 0 0 0 0 1 0

    b << 1 -> 258

    b << 1 연산 후 비트 -> 1 0 0 0 0 0 0 1 0

 

8. 논리 연산자

    &&는 false로 시작하면 무조건 false이다. (그리고)

    true && true -> true

    true && false -> false

    false && true -> false

    false && false -> false

 

    ||는 true로 시작하면 무조건 true이다. (또는)

    true || true -> true

    true || false -> true

    false || true -> true

    false || false -> false

반응형