[JAVA] 연산자

IT/JAVA 2018. 3. 23. 12:43

이전 포스팅의 연산자에서 진법으로 갑자기 넘어갔는데

이번 포스팅은 연산자에 대해서 더 알아봅니다.

 


 

 

 

연산자

  • 연산하기 위해 예약해 놓은 부호들

 

 

1.연산자 우선순위 :                최단산쉬관리삼대콤마

먼저 연산<---------------------->나중에 연산

 

[최]우선

 (  ) 괄호 

[단]항  

 ~ , ! , + , -, ++ , --    

[산]

 + , - , * , / , %

[쉬]프트

 << , >> , >>>

[관]

 > , < , >= , <= , == , !=

[리]

 비트논리 : & ,! , | , ^

 인발논리 : && , ||

[삼]

 ? :

[대]

 산술대입  =. += , -= , *= , /=, %=

 쉬프트대입 <<= , >>=, >>>=

 비트논리대입 &=, != , ^= 

[콤마]

 , 콤마

 

 1) 단항 (Unary ) 연산에 필요한 항(피연산자)이 하나인 연산자,

 

  * [ ~(tilde) 연산자 ] 1의 보수 연산자 ( 이진수로 변환해야하는 연산자 )

    부호가 바뀌고 값도 변경된다

         ~ 양수 : 부호가 변경되고 1증가

         ~ 음수 : 부호가 변경되고 1감소

    ~5 = 5는 ( 0000 01010) 인데 ~5는 ( 1111 1010 ) = -6

    ~-3 = -3은 (1111 1101) 인데 2으로 변환 (0000 0011) = 2로

     

      * [ !  ( not 연산자) ] : true -> false , false -> true 

    !(3>2) 는 FALSE가 나온다.

     

      * [ + ] : 형식적 제공

      * [ - ]  : 2의 보수연산

         부호만 변경되고 값은 그대로 유지하는 연산

     

      * [ ++ ]   증가 연산(대상채의 값을 1씩 증가)   >변수에만적용가능

      * [ -- ]     감소 연산(대상체의 값을 1씩 감소)   >변수에만적용가능

     

    [연산자] [대상체] = 전위연산 ( 증가/감소를 수행하고 대입 ) 

    [대상체] [연산자] = 후위연산 ( 대입을 수행하고 증가/감소 )

     

    대입연산자에 할당하거나 method인자 값을 넣어줄때 전위와 후위는

    다른 값을 할당한다.

     

     

    소스코드 & 출력)

     

     

    2) 산술연산자

     

     +

    더하기 

     -

     빼기

     *

     곱하기

     /

     나누기

     %

     나머지( 나눈 값의 나머지 )

     

    소스코드로 재미잇게 알아보기)

     

    3) 쉬프트연산자 : 비트밀기 연산자

    *  [ <<  Left Shift  연산자 ]    : 비트를 왼쪽으로 밀어내고 빈칸을 항상 0으로 채운다.

     밀어 낼 칸수가 전체 비트수를 넘어가면 다시 뒤로 돌아서

     처음부터 채워진다.

    *  [ >>  Right Shift  연산자 ]  : 비트를 오른쪽으로 밀고 밀어서 빈칸을 최상휘 부호비트에

     따라 양수면 0 을 음수면 1을 채운다.

     비트에 밀려나면 버린다.

    *  [ >>>  Unsigned Right Shift  연산자 ] : 비트를 오른쪽으로 미는데 양수,음수에 관계

    없이 빈칸을 항상 0으로 채운다.

    (즉 음수에다가 이 연산자를 쓰면 양수가 된다.)

     

     

    문법 ) [대상체/피연산자] [연산자] [밀어낼 칸 수]

    10 << 2 ( 10이라는 피연산자의 비트를 왼쪽으로 2칸밀어냄 )

     

    [ 10 << 2 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    10의

    2진수 

    8 + 2 = 10

     

    [10 << 2 연산 이후]

     

    부호

    비트 

    64 

    32 

    16 

    연산

    결과 

     0

    32 + 8 = 40

     


    5 << 4   연산

    [ 5 << 4 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    5의

    2진수 

    0

    4 + 1 = 5

     

    [5 << 4 연산 이후]

     

    부호

    비트 

    64 

    32 

    16 

    연산

    결과 

    1

    0

    1

     0

    64 + 16 = 80


    13 >> 2   연산

    [13 >> 2 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    13의

    2진수 

    1

    8+4 + 1 = 13

     

    [13 >> 2연산 이후]

     

    부호

    비트 

    64 

    32 

    16 

    연산

    결과 

    0

    0

    0

    1

     1

     

    2+1 =  3


    25 >> 4   연산

    [25 >> 5 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    13의

    2진수 

    1

    0

    8+4 + 1 = 13

     

    [13 >> 2연산 이후]

     

    부호

    비트 

    64 

    32 

    16 

    연산

    결과 

    0

    0

    0

    0

     1

     


    -10 >> 3

    [-10 >> 3 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    13의

    2진수 

    1

    0

    1

     

     

    [-10 >> 3연산 이후]

     

    부호

    비트  

    64 

    32 

    16 

    연산

    결과 

    1

    1

    1

    1

    1

    0

    0


     

    15 >>> 3

    [15 >> 3 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    13의

    2진수 

    0

    0

    0

    0

    1

    1

    1

     8+4+2+1 =15

     

    [15 >> 3연산 이후]

     

    부호

    비트  

    64 

    32 

    16 

    연산

    결과 

    0

    0

    0

    0

    0

    0

    0

    1

    1


     

    -1>>> 1

    [-1> >> 1 연산이전]

     

    부호

    비트 

    64 

    32 

    16 

     1

    13의

    2진수 

    1

    1

    1

    1

    1

    1

    1

     

     

    [-1 >>> 1연산 이후]

     

    부호

    비트  

    64 

    32 

    16 

    연산

    결과 

    0

    1

    1

    1

    1

    1

    1

    1

    127

     


     

     

     

     

    4) 관계연산자 : 대소 비교

    * 연산의 결과가 True 나 False로 발생

    * >,<,<=,>=,== ( 같으면 True 다르면 False) ,!= ( 다르면 True 같으면 False)

     

    5) 논리연산자

    * 일반논리 : 여러개의 관계연산자를 묶어서 비교

    [ && AND연산자 ]

    - 전항이 True 이고 후항이 True 일 때에만 True 를 내보낸다.

          나머지는 False

    - 전항이 False면 후항은 계산하지 않는다.

     

    [ ||  OR연산자 ] :

    - 전항과 후항이 전부 False일 때에만 False를 내보낸다.

    나머지는 True

    - 전항이 True 이면 후항은 계산하지 않는다.

    * 비트논리 : 이진법으로 했을 때 사용하는 논리

    & ( AND) : 상위비트와 하위비트 모두 1일때만 1을 내림 ( 나머지 0)

    |    (OR)   : 상위비트와 하위비트 모두 0 일때만 0을 내림 ( 나머지 1)

    ^   (XOR) : 상위비트와 하위비트 둘 중 하나만 1 일때 1을 내림

     

     

    ex)

     12 & 9

     12 | 9

    12 ^ 9 

     

    12    >(1100)2

    9      >(1001)2

    결과  >(1000 )2=8

     

    12    >(1100)2

    9      >(1001)2

    결과  >(1101 )2=13

     

    12    >(1100)2

    9      >(1001)2

    결과  >(0101 )2=5

     

     

    6) 삼항 연산자 ( 조건 연산 ) ? :

    문법)

    (연산식)? 항1 : 항2

     

    연산식이 true 이면 항1 을 반환한다.

    연산식이 false 이면 항2 을 반환한다.

     

     

    소스코드)

     

    결과)

     

    7) 대입연산자

    순수대입     : =

    산술대입     : +=, -=, *=, /=, %= 

    쉬프트대입  : <<=, >>= , >>>=      

    비트논리대입: &= , |= , ^=

     

    - 순수대입을 제외하고 대상체가 변수여야 만 한다. 연산 후 연산결과를 저장한다.

     

    블로그 이미지

    이든Kim

    ,