Computer Sci‧ence/C

C언어_04장

강-프로 2014. 2. 6. 16:56
반응형

1. 비트 vs 바이트

     1    vs 8


2. 8진수와 16진수

    int=10;   //10진수

    int= 0xa //16진수: 16진수는 0x를 붙인다. 출력시에는 %x 로 나타낸다. 

    int= 012 //8진수: 8진수는 0으로 시작한다. 

??코드같은데에서 0x로 시작하는거 다 16진수 표기인가? 문득 이런 생각이 드네...



가장 왼쪽에 위치하고 있는 비트가 부호비트이다. (MSB: Most Significant Bit)

0이면 양수 1이면 음수를 나타낸다. 

ex) 00000101 =5

unsigned 가 붙으면 표현의 범위가 달라진다. 첫 비트를 부호에 사용하지 않는다는 의미로 데이터 값의 범위가 두배가 된다. 

기본 자료형 중에서 정수형 자료형(char, int, short..) 에만 가능하며 실수형 자료형에는 붙일 수 없다. 


값을 마이너스로 표현하는 방법은 해당 양수의 보수를 취하는 방법으로 나타낸다


0 

0 

0 

0 

0 

1 

0 

1 

1 

1 

1 

1 

0 

1 

0 

0 

0 

0 

0 

0 

0 

0 

먼저 위의수의 보수를 취한뒤, +1을 더하는 방법으로 나타낸다. (마지막줄은 더한 뒤의 결과: ex 5+ -5=0)

이를 2의 보수법에 의한 음수 표현방법이라고 한다. 


실수표현의 방법 ±(1.m) X2e-127

* 하지만 이런 실수 표현에는 오차가 존재한다. 이것을 부동소수점 오차라고 얘기한다. 근사치의 오차가 존재하기 때문이다. 


3. 비트 단위 연산 (p97)

: &   AND (15&20 을 하게되면, 15와 20은 비트로 (2진수 형태) 표현된뒤 비트단위의 AND가 행해져 결과값은 4가 된다)

: |    OR

: ^   XOR (두개의 비트가 서로 다를 경우 1을 반환)

: ~   NOT

: << 왼쪽으로 이동 2    (1 비트씩 왼쪽으로 이동할 때마다 값이 두배가 된다) 

: >> 오른쪽으로 이동 2 (시스템에 따라 그의 값은 변화하게 된다) 


#include <stdio.h>


int main(void)

{


int a = 15;

int b = 20;

int c = a&b;

int d = a | b;

int e = a^b;

int f = ~a;


printf("AND 연산 결과: %d\n", c);

printf("OR 연산 결과: %d\n", d);

printf("^의 연산결과: %d\n", e);

printf("~의 연산결과: %d 결과는 음수, 부호가 반전되었기 때문이다. \n", f);


return 0;


}


연습문제 4-4

int main(void)

{


int a;

int opp00,opp01;

int val20, result20;




printf("음의 정수값을 입력: ");

scanf_s("%d", &a);


opp00 = ~a;

opp01 = opp00 + 1;


printf("음의 정수의 값: %d\n", opp01);


printf("2배를 원하는 수:");

scanf_s("%d", &val20);

result20 = val20 << 1;

printf("결과값: %d\n", result20);




return 0;






이번장에서 공부한 내용 정리

1. 2진수와 16진수에 대해서 살펴보았다. 

2. 정수와 실수가 컴퓨터에 의해서 표현되는 방법을 살펴보앗다. 

3. 실수를 표현하는데 있어서 오차가 발생하는 이유를 살펴보았다. 가장 중요한 내용이라 할 수 있다. 

4. %d 이외에 %f 라는 서식 문자에 대해서 살펴보았다. 

5. 비트 단위의 연산에 대해 살펴보 

반응형