달력

1

« 2020/1 »

  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  

   

시프트 연산자 확인

   

   

소스코드

   

  1. public class OperatorEx11 {
  2.         public static void main(String[] args){
  3.                 System.out.println("=========시프트 연산자=========");
  4.                 System.out.println("");
  5.                  
  6.                 byte a = 12;
  7.                 // 128 64 32 16 8 4 2 1
  8.                 // 0   0  0  0  1 1 0 0
  9.                 // 0   0  0  0  0 0 1 1  ( >> 2 )
  10.                 // 0   0  1  1  0 0 0 0  ( << 2 )
  11.                  
  12.                 System.out.println("a : " + a);
  13.                 byte c = (byte)(>> 2);
  14.                 System.out.println("a >> 2: " + c);
  15.                  
  16.                 System.out.println("");
  17.                 System.out.println("a : " + a);
  18.                 byte d = (byte)(<< 2);
  19.                 System.out.println("a << 2: " + d);
  20.                  
  21.                 System.out.println("");
  22.                 System.out.println("a : " + a);
  23.                 byte e = (byte)(>>> 2);
  24.                 System.out.println("a >>> 2: " + e);
  25.                  
  26.                 System.out.println("");
  27.                 System.out.println("a : " + a);
  28.                 byte f = (byte)(>> 2);
  29.                 System.out.println("a >> 2: " + f);
  30.                  
  31.         }
  32. }


 

 

출력결과 

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

   

비트연산의 특징

  • 왼쪽으로의 비트 열 이동은 2의 배수의 곱
  • 오른쪽으로의 비트 열 이동은 2의 배수의 나눗셈

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

 

시프트 연산자(Shift Operator)

bit단위의 연산처리를 수행하며 자료의 가공을 위해 오른쪽 또는 왼쪽으로 이동하여 값에 대한 변화를 일으키는 연산자입니다.

 

 

시프트 연산자 종류


연산자

의미

>> 

·       bit값을 오른쪽으로 이동.

·       이동으로 인한 빈자리는 부호값으로 채움(음수인 경우 1, 양수인 경우 0)

 

n >> 2;

<< 

·       bit값을 왼쪽으로 이동.

·       이동으로 인한 빈자리는 0으로 채움.

 

n << 2;

>>> 

·       bit값을 오른쪽으로 이동

·       이동으로 인한 빈자리는 0으로 채움.

 

n >>> 2;

 

 

연산 수식

비트 값

출력 값

5

0 0 0 0 0 1 0 1

0

5 >> 2

0 0 0 0 0 0 0 1

1

5 << 2

0 0 0 1 0 1 0 0

20

5 >>> 2

0 0 0 0 0 0 0 1

1

 

 

비트연산의 특징

·       왼쪽으로의 비트 열 이동은 2의 배수의 곱

·       오른쪽으로의 비트 열 이동은 2의 배수의 나눗셈

 

Posted by codedragon codedragon

댓글을 달아 주세요

비트 연산자

   

   

소스코드

   

  1. public class OperatorEx10 {
  2.          
  3.         public static void main(String[] args){
  4.                 System.out.println("=========비트 연산자=========");
  5.                 System.out.println("");
  6.                  
  7.                 byte a = 12;
  8.                 // 128 64 32 16 8 4 2 1
  9.                 // 0   0  0  0  1 1 0 0
  10.                  
  11.                 byte b = 20;
  12.                 // 128 64 32 16 8 4 2 1
  13.                 // 0   0  0  1  0 1 0 0
  14.                  
  15.                 System.out.println("비트단위의  AND(&): ");
  16.                 /*
  17.                  1   2    결과
  18.                 0       0       0
  19.                 1       0       0
  20.                 0       1       0
  21.                 1       1       1*/
  22.                  
  23.                 byte c = (byte) (& b);
  24.                 // 128 64 32 16 8 4 2 1
  25.                 // 0   0  0  0  1 1 0 0
  26.                 // 0   0  0  1  0 1 0 0
  27.                 //----------------------
  28.                 // 0   0  0  0  0 1 0 0
  29.                  
  30.                 System.out.println("a : " + a);
  31.                 System.out.println("b : " + b);
  32.                 System.out.println("a & b : " + c);
  33.                  
  34.    
  35.                  
  36.                 System.out.println("");
  37.                 System.out.println("비트단위의  OR(|): ");
  38.                 /*
  39.                  1   2    결과
  40.                 0       0       0
  41.                 1       0       1
  42.                 0       1       1
  43.                 1       1       1*/
  44.                  
  45.                 byte d = (byte) (| b);
  46.                 // 128 64 32 16 8 4 2 1
  47.                 // 0   0  0  0  1 1 0 0
  48.                 // 0   0  0  1  0 1 0 0
  49.                 //----------------------
  50.                 // 0   0  0  1  1 1 0 0
  51.                  
  52.                 System.out.println("a : " + a);
  53.                 System.out.println("b : " + b);
  54.                 System.out.println("a | b : " + d);
  55.                  
  56.                  
  57.    
  58.                 System.out.println("");
  59.                 System.out.println("비트단위의  XOR(^): ");
  60.                 /*
  61.                  1   2    결과
  62.                 0       0       0
  63.                 1       0       1
  64.                 0       1       1
  65.                 1       1       0*/
  66.                  
  67.                 byte e = (byte) (^ b);
  68.                 // 128 64 32 16 8 4 2 1
  69.                 // 0   0  0  0  1 1 0 0
  70.                 // 0   0  0  1  0 1 0 0
  71.                 //----------------------
  72.                 // 0   0  0  1  1 0 0 0
  73.                  
  74.                 System.out.println("a : " + a);
  75.                 System.out.println("b : " + b);
  76.                 System.out.println("a ^ b : " + e);
  77.          
  78.         }
  79. }

 


   

   

출력결과

   

Posted by codedragon codedragon

댓글을 달아 주세요

비트연산자

   

소스코드

  1. public class OperatorEx16 {
  2.         public static void main(String[] args)
  3.         {
  4.                 int num1=5;             /* 00000000 00000000 00000000 00000101 */
  5.                 int num2=3;             /* 00000000 00000000 00000000 00000011 */
  6.                 int num3=-1;    /* 11111111 11111111 11111111 11111111 */
  7.                  
  8.                 System.out.println(num1 & num2);
  9.                 // 00000000 00000000 00000000 00000101
  10.                 // 00000000 00000000 00000000 00000011
  11.                 // 00000000 00000000 00000000 00000001
  12.                  
  13.                 System.out.println(num1 | num2);
  14.                 // 00000000 00000000 00000000 00000101
  15.                 // 00000000 00000000 00000000 00000011
  16.                 // 00000000 00000000 00000000 00000111
  17.                  
  18.                 System.out.println(num1 ^ num2);
  19.                 // 00000000 00000000 00000000 00000101
  20.                 // 00000000 00000000 00000000 00000011
  21.                 // 00000000 00000000 00000000 00000110
  22.                  
  23.                 System.out.println(~num3);     
  24.                 // 11111111 11111111 11111111 11111111
  25.                 // 00000000 00000000 00000000 00000000
  26.         }
  27. }


 

   

출력결과

   

   

Posted by codedragon codedragon

댓글을 달아 주세요


 

비트 연산 진리표

 

& (AND)

A

B

A & B

0

0

0

0

1

0

1

0

0

1

1

1

 

 

 

| (OR)

A

B

A | B

0

0

0

0

1

1

1

0

1

1

1

1

 

 

 

^ (XOR)

A

B

A ^ B

0

0

0

0

1

1

1

0

1

1

1

0

 

 

 

~ (NOT)

A

~A

0

1

1

0

 

 


Posted by codedragon codedragon

댓글을 달아 주세요

증감 연산자 

   

   

소스코드

  1.  public class OperatorEx01 {
  2.         public static void main(String[] args){
  3.                  
  4.                 System.out.println("=========증가 연산자=========");
  5.                 int i1=5;
  6.                 int i2=5;
  7.                 System.out.println("증가연산자 선행 : " + (++i1) );
  8.                 System.out.println("i1 : " + i1);
  9.                                  
  10.                 System.out.println("증가연산자 후행 : "+ (i2++) );
  11.                 System.out.println("i2 : " + i2);
  12.                  
  13.                 System.out.println("\n=========감소 연산자=========");
  14.                 System.out.println("");
  15.                 int j1 = 10;
  16.                 int j2 = 10;
  17.                 System.out.println("감소연산자 선행 : "+ (--j1) );
  18.                 System.out.println("j1 : " + j1);
  19.                  
  20.                 System.out.println("감소연산자 후행 : "+ (j2--) );
  21.                 System.out.println("j2 : " + j2);
  22.         }
  23. }


   

 

출력결과

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

증감 연산자 선행/후행 실행후 결과값 확인

   

   

소스코드

  1.  public class OperatorEx15 {
  2.    
  3.         public static void main(String[] args) {
  4.    
  5.                 int n1=7;
  6.                 int result1=0;
  7.                 result1 = ++n1;
  8.                 System.out.println("++n : " + result1);
  9.                  
  10.                  
  11.                 int n2=7;
  12.                 int result2 =0;
  13.                 result2= --n2;
  14.                 System.out.println("--n : " + result2);
  15.                  
  16.                  
  17.                 int n3=7;
  18.                 int result3 =0;
  19.                 result3= n3++;
  20.                 System.out.println("n++ : " + result3);
  21.                  
  22.                  
  23.                 int n4=7;
  24.                 int result4 =0;
  25.                 result4= n4--;
  26.                 System.out.println("n-- : " + result3);
  27.                 //증감연산자 후행에서는 증가/감소값이 해당 연산 수행문에서는 적용이 되지 않고
  28.                 //다음 문장 부터 적용이 되게 됩니다.
  29.                  
  30.         }
  31. }


   

 

출력결과 

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

SCE연산 수행으로 인한 주의 사항

   

   

   

소스코드

  1.  class OperatorSCE
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int num1=0, num2=0;
  6.                 boolean result;
  7.                  
  8.                 result = (num1+=10)<&& (num2+=10)>0;
  9.                 //(num1+=10)<0 -> 10<0 -> false
  10.                 //(num2+=10)>0 -> 10>0 -> true
  11.                 // false && true
  12.                 //SCE연산이 수행됩으로써 오른쪽의(num2+=10) 연산이 수행되어 지지 않습니다.
  13.                 System.out.println("result= "+result);
  14.                 System.out.println("num1= " + num1 + ", num2= " + num2);
  15.                  
  16.                  
  17.                 System.out.println("");
  18.                 result = (num1+=10)>|| (num2+=10)>0;
  19.                 //(num1+=10)>0 -> 10>0 -> true
  20.                 //(num2+=10)>0 -> 10>0 -> true
  21.                 // false && true
  22.                 System.out.println("result= " + result);
  23.                 System.out.println("num1= " + num1 + ", num2= " + num2);
  24.                 //SCE연산이 수행됩으로써 오른쪽의 (num2+=10) 연산이 수행되어 지지 않습니다.
  25.         }
  26. }

https://github.com/10zeroone/study_Java/blob/master/ch03-operator/src/OperatorSCE.java

   

 

출력결과 

   

   

   

과제

num1과 num2가 다 연산되게 코딩 바꿔보기

Posted by codedragon codedragon

댓글을 달아 주세요

증감/비교/논리 연산자

   

   

소스코드

  1.  public class OperatorEx05 {
  2.          
  3.         public static void main(String[] args){
  4.                 System.out.println("=========증감/비교/논리 연산자=========");
  5.                  
  6.                  
  7.                 System.out.println("논리 :");
  8.                 int a, b;
  9.                 a = b = 10;
  10.                 boolean c = (a++ >= ++b) && (++> b++);
  11.                 System.out.println("a++ >= ++b && ++a : " + c);
  12.                 System.out.println("a : " + a);
  13.                 System.out.println("b : " + b);
  14.                  
  15.                  
  16.                 System.out.println("");
  17.                 System.out.println("논리 :");
  18.                 int d, e;
  19.                 d = e = 10;
  20.                  
  21.                 boolean f = ++> e++ || d++ >= ++e;
  22.                 System.out.println("++d > e++ || d++ >= ++e : " + f);
  23.                 System.out.println("d : " + d);
  24.                 System.out.println("e : " + e);
  25.                  
  26.         }
  27. }


   

 

출력결과

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요