달력

12

« 2019/12 »

  • 15
  • 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

댓글을 달아 주세요


 

실수

·         소수부나 지수부가 있는 수를 가리킵니다.

·         소수점을 가진 숫자를 표현합니다.

·         정수보다 훨씬 넓은 표현 범위를 가집니다.

·         정수 표현방식보다 중요합니다.

·         실수는 오차 동반

 

 

 

실수 표현

실수 표현의 문제점

·         0 1사이의 실수만 해도 수가 무한대

·         단순히 바이트 정도로 모든 실수를 표현하는 것은 불가능합니다.

 

 

문제점에 대한 해결책

정확도를 포기하고, 대신에 표현할 있는 값의 범위를 넓히고 근사값을 사용합니다.

 

 

0 1 통한 정수와 실수 표현


1.1 1.2사이에도 무한 대의 실수값이 존재하므로 0 1로는 정확한 실수값을 표현할 없는 한계 있습니다.

실수를 표현하기 위한 한계를 해결하기 위해 근사치를 사용하게 됩니다.

실수형 데이터의 오차는 자바뿐만 아니라 모든 프로그래밍 언어에서 발생하는 공통된 문제입니다.

 

 

 

 

 

Posted by codedragon codedragon

댓글을 달아 주세요


 

형변환

타입의 데이터가 다른 타입으로 변환하는 형변환, 자료형 변환, 타입 변환이라고 합니다.

타입 변환은 크게 자동 타입 변환과 강제 타입 변환으로 구분됩니다.

 

 

 

자료형 변환의 종류

자동 형변환

컴파일러가 자동 형변환 시킵니다

강제 형변환

프로그래머가 강제 형변환 시킵니다

 

 

 

자동 형변환

·       다른 자료형 산술 연산의 경우에 작은 자료형에서 자료형으로 자동 형변환

 

 

정수 + 실수 또는 실수 + 정수와 같은 산술 연산을 하는 경우 자동 형변환

#include <stdio.h>

int main(void)

{

   int       num1=100;        // 정수

   double num2=3.14;        // 실수

   printf("%lf \n", num1+num2);    // 정수 + 실수

   return 0;

}

 

 

자료형 변환 우선순위 (작은 자료형에서 자료형으로…) 자동 형변환

char < int < long < float < double < long double

 



 

대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환

#include <stdio.h>

int main(void)

{

   char     num1=130;

   int       num2=3.14;

   double num3=3;

   printf("%d, %d, %lf \n", num1, num2, num3);

   return 0;

}

 

 

Posted by codedragon codedragon

댓글을 달아 주세요

   

   

자바의 자동 형변환 규칙(Implict Conversion)

값의 표현 범위로 자동 형변환됩니다.


   

 

double num = 3.14f + 10;

//10 10F 자동 형변환

 


Posted by codedragon codedragon

댓글을 달아 주세요

   

실수 자료형 선택 기준 (float vs double)

  • float와 double 모두 매우 충분한 표현 범위를 가지고 있지만
  • 이 둘의 가장 큰 차이점은 정밀도가 다릅니다.
  • 따라서 필요한 정밀도를 바탕으로 자료형을 결정해야 하며
  • 일반적으로 double 자료형 선택을 권장합니다.

 

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

자동 형변환 (산술연산)

다른 자료형 간 산술 연산의 경우에 작은 자료형에서 큰 자료형으로 자동 형변환

   

   

소스코드

   

#include <stdio.h>

int main(void) {

int num1=100; // 정수

double num2=3.14; // 실수

//작은 자료형에서 자료형으로 자동 형변환

printf("%lf \n", num1+num2); // 정수 + 실수

printf("%lf \n", num1/num2); // 정수 + 실수

//2째자리까지 출력

printf("%.2lf \n", num1+num2); // 정수 + 실수

return 0;

}


   

   

출력결과

   

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

댓글을 달아 주세요

   

2진수, 10진수, 16진수, 8진수

진수

설명

표현법

2진수

0~1까지의 숫자를 사용

컴퓨팅 표현법

10진수

0~9까지의 숫자를 사용

일상적인 표현법

16진수

0~9까지의 숫자를 사용하고, 9 이후부터 a, b, c, d, e, f 문자 사용

컴퓨팅 표현법

8진수

0~7까지의 숫자를 사용

컴퓨팅 표현법

   

   

2진수, 10진수, 16진수, 8진수 데이터 표현 방법

2진수

10진수

16진수

8진수

0000 0000

0

0x0

00

0000 0001

1

0x1

01

0000 0010

2

0x2

02

0000 0011

3

0x3

03

0000 0100

4

0x4

04

0000 0101

5

0x5

05

0000 0110

6

0x6

06

0000 0111

7

0x7

07

0000 1000

8

0x8

010

0000 1001

9

0x9

011

0000 1010

10

0xa

012

0000 1011

11

0xb

013

0000 1100

12

0xc

014

0000 1101

13

0xd

015

0000 1110

14

0xe

016

0000 1111

15

0xf

017

0001 0000

16

0x10

020

0001 0001

17

0x11

021

   

10 == 0xa == 012

17 == 0x11 == 021

   

   

 

2진수를 10진수로 표현하는 방법

   

00001101를 10진수로 변환하기

   

   

   

2진수

10진수

2진수

10진수

2진수

10진수

0000 0000

  

0000 0110

  

0000 1100

  

0000 0001

  

0000 0111

  

0000 1101

  

0000 0010

  

0000 1000

  

0000 1110

  

0000 0011

  

0000 1001

  

0000 1111

  

0000 0100

  

0000 1010

  

0001 0000

  

0000 0101

  

0000 1011

  

0001 0001

  

   

   

2진수를 8진수와 16진수로 표현하는 방법

2진수

00000101 00001101 01010111 01001101

8진수

02505253515

16진수

050d574d

   

   

13을 -13로 변환

양수를 음수로 변환시 1의 보수를 구한 다음 1을 더해주면 음수값이 되고

음수에서 양수로 변환시 1의보수를 구한다음 1을 더해주면 양수값이 나옵니다.

   

Posted by codedragon codedragon

댓글을 달아 주세요