-
C언어_04장Computer Sci‧ence/C 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
1
0
1
0
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. 비트 단위의 연산에 대해 살펴보
반응형'Computer Sci‧ence > C' 카테고리의 다른 글
C언어_07장 (0) 2014.02.11 C언어_05장 (0) 2014.02.07 techdaysmini 토요세미나 시리즈 1회 - Visual Studio 제대로 파헤쳐보기 1탄 (0) 2014.02.06 C언어_03장 (0) 2014.02.05 C언어_02장 (0) 2014.02.04