달력

8

« 2020/8 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  


 

비트 연산자(bitwise operator)

·       Bit Operator

·       피연산자 연산의 대상이 되는 값들을 내부적으로 bit(비트)단위 변경한 연산을 수행하는 연산자입니다.

·       논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행합니다.

·       0 1 자리에 대한 연산을 수행하며, 0 또는 1 결괏값을 가진다.

·       하드웨어와 관련된 처리를 쉽게 해줍니다.

·       메모리 공간을 줄여서 성능을 높여 있습니다.

 

 

 

'Development > C/C++' 카테고리의 다른 글

C  (0) 2019.05.29
반복문  (0) 2019.05.28
비트 연산자(bitwise operator)  (0) 2019.05.28
비트(Bit)  (0) 2019.05.27
바이트(byte)  (0) 2019.05.27
fread( ) 함수와 fwrite( ) 함수 - 바이너리 파일 입출력  (0) 2019.05.26
Posted by codedragon codedragon

댓글을 달아 주세요


 

연산자(Operator)

·       연산자란 자료의 가공을 위해 정해진 방식에 따라 계산하고 결과를 얻기 위한 행위를 의미하는 기호들을 의미합니다.

·       각 연산자들은 연산을 하기 위해 인식하는 자료형들이 정해져 있습니다.

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

양수/음수에서 비트단위 이동 연산 수행

   

   

   

소스코드

   

#include <stdio.h>

int main(void)

{

int num1=10;

//00001010

int num2=-10;

//11110101 (1의보수)

//11110110 (1 더함) //-10

int result1;

int result2;

result1 = num1 >> 1;

//00000101

//양수인경우 0으로 채움

result2 = num2 >> 1;

//11111011 //-5

//음수인경우 1 채움

//오른쪽으로 1비트씩 이동할 마다 2 나누어집니다.

//11111011 //-5

//00000100 (1의보수)

//00000101 (1 더함) //5

printf("비트단위 >> 연산 결과: %d \n",result1); //5

printf("비트단위 >> 연산 결과: %d \n",result2); //-5

return 0;

}


   

   

출력결과

 

Posted by codedragon codedragon

댓글을 달아 주세요

비트단위 << 연산, 비트단위 >> 연산

   

   

소스코드

int main(void) {

int num1=10;

// 00001010

int result1;

result1 = num1 << 2;

// 0 0 1 0 1 0 0 0

//왼쪽 시프트시 남은 공간은 0으로 채웁니다.

//왼쪽으로 1비트씩 이동할 마다 2 곱해집니다.

printf("비트단위 << 연산 결과: %d \n", result1); //결과 40

return 0;

}


   

 

출력결과


 

Posted by codedragon codedragon

댓글을 달아 주세요

비트연산자

비트 단위 AND 연산, 비트 단위 OR 연산, 비트 단위 XOR 연산, 비트 단위 NOT 연산

 


&연산자 vs 주소연산자

피연산자사이의 &

&연산자

변수앞의 &

주소연산자

   

   

소스코드

   

#include <stdio.h>

int main(void) {

int a=12;

// 128 64 32 16 8 4 2 1

// 0 0 0 0 1 1 0 0

int b=20;

// 128 64 32 16 8 4 2 1

// 0 0 0 1 0 1 0 0

int result1, result2, result3, result4;

result1 = a & b;

// 128 64 32 16 8 4 2 1

// 0 0 0 0 1 1 0 0

// 0 0 0 1 0 1 0 0

//----------------------

// 0 0 0 0 0 1 0 0

printf("a: %d \n", a);

printf("b: %d \n", b);

printf("비트단위 & 연산 결과: %d \n\n",result1); // 결과 4

result2 = a | b;

// 128 64 32 16 8 4 2 1

// 0 0 0 0 1 1 0 0

// 0 0 0 1 0 1 0 0

//----------------------

// 0 0 0 1 1 1 0 0

printf("a: %d \n", a);

printf("b: %d \n", b);

printf("비트단위 | 연산 결과: %d \n\n",result2); // 결과 28

result3 = a ^ b;

// 1 2 결과

// 0 0 0

// 1 0 1

// 0 1 1

// 1 1 0

printf("a: %d \n", a);

printf("b: %d \n", b);

printf("비트단위 ^ 연산 결과: %d \n\n",result3); // 결과 24

//~ 연산자

result4 = ~ a;

// 128 64 32 16 8 4 2 1

// 0 0 0 0 1 1 0 0

// 1 1 1 1 0 0 1 0

printf("a: %d \n", a);

printf("비트단위 ~ 연산 결과: %d \n",result4); // 결과는

return 0;

}


   

   

출력결과

   

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

댓글을 달아 주세요