7장 비트 단위 연산과 상수, 기본자료형
개발도구 : Dec C++
● & : 비트단위 연산 AND
ex) a & b
: 오른쪽 왼쪽 둘다 true 일때 1을 반환
-> 1 & 1 일때만 1을 반환
ex) 0 & 1 ==> 0
0 & 0 ==> 0
1 & 1 ==> 1
EX) ========================================
#include <stdio.h>
int main()
{
int a = 5; // 0000 0101
int b = 20; // 0001 0100
int c = a & b;
printf("AND 연산결과 : %d \n", c); // 결과 4
system("PAUSE");
return 0;
}
● | : 비트단위 연산 OR
ex) a | b
: 오른쪽 왼쪽 하나라도 true 일때 1을 반환
-> 0 & 1 일때만 1을 반환
ex) 0 | 1 ==> 1
0 | 0 ==> 0
1 | 1 ==> 1
EX) ========================================
#include <stdio.h>
int main()
{
int a = 5; // 0000 0101
int b = 20; // 0001 0100
int c = a | b;
printf("OR 연산결과 : %d \n", c); // 결과 21
system("PAUSE");
return 0;
}
● ^ : 비트단위 연산 XOR
ex) a ^ b
: 두값이 서로 다를때 1을 반환
-> 0 & 1 일때만 1을 반환
ex) 0 | 1 ==> 1
0 | 0 ==> 0
1 | 1 ==> 0
EX) ========================================
#include <stdio.h>
int main()
{
int a = 5; // 0000 0101
int b = 20; // 0001 0100
int c = a ^ b ;
printf("XOR 연산결과 : %d \n", c); // 결과 17
system("PAUSE");
return 0;
}
● ~ : 비트단위 연산 NOT
ex) ~ a
: 값을 반대로 나타낸다.
-> 0은 1로, 1은 0으로 바뀐다.
ex) ~0 ==> 1
~1 ==> 0
EX) ========================================
#include <stdio.h>
int main()
{
int a = 20; // 0001 0100
int c = ~a ; // 1110 1011
printf("NOT 연산결과 : %d \n", c); // 결과 -21
system("PAUSE");
return 0;
}
● << : 비트단위 연산 왼쪽 쉬프트 연산
ex) a << b -> a의 비트들을 b칸씩 왼쪽으로 이동
8 << 2 -> 8의 비트들을 왼쪽으로 2칸 이동
: 8의 2인수 형태 : 0000 1000
-> 1을 왼쪽으로 두칸 이동 : 0010 0000 ; 32
※ 부호비트 까지 밀려나기때문에 주의한다!
EX) ========================================
#include <stdio.h>
int main()
{
int a = 8;
int c = a << 2; // c = 32
printf("%d의 << %d 만큼 비트연산한 결과 : %d \n", a, 2, c);
system("PAUSE");
return 0;
}
● >> : 비트단위 연산 오른쪽 쉬프트 연산
ex) a >> b -> a의 비트들을 b칸씩 왼쪽으로 이동
8 >> 2 -> 8의 비트들을 오른쪽으로 2칸 이동
#include <stdio.h>
int main()
{
int a = -8;
int c = a >> 2; // c = -2
printf("%d의 >> %d 만큼 비트연산한 결과 : %d \n", a, 2, c);
system("PAUSE");
return 0;
}
● 자료형(data type) ; 자료를 나타내는 형(type)
- 선언할 변수의 특징을 나타내는 문자(키워드)
- 1. 정수냐? 실수냐?에 대해서 나타냄
> 미리 선언을 하는것
- 2. 메모리를 몇 byte 할당받아서 나타낼건지?
> 저장할 데이타의 메모리공간 할당
● 기본자료형
- 기본적으로 제공이 되는 자료형
ex) int, float, double, long형
● 사용자 정의 자료형
- 사용자가 정의하는 자료형
- ex) 구조체, 공용체, 클래스(C++)
● 기본자료형의 종류
char 1 byte
short 2 byte
int 4 byte
(64비트 운영체제 : 8byte)
long 4 byte
float
double
long doulbe
● ANSI( 표준화된 문법제정) 99년도에 표준된 데이타표현
- int가 4byte면 long은 4byte 이거나 그 이상이 되어야 함
- 명확하지 않음 ;long(표준화되지 않았다고..)
- long은 시스템에 따라 차이가 남(크기 : int <= long)
- long double도 마찬가지로 인식을 한다.(long double >= double)
● n비트로 표현할수 있는 데이타 수
= 2(n승);
ex) 1byte : 2(8승) = 256가지의 데이타 표현 -> char형
● 자료형이 다양한 이유? ;
-=> 데이타 표현방식이 다르기때문
- 정/실수형 데이타를 표현하는 방식
-=> 메모리 공간을 적절히 사용하기 위해서
● 자료형 선택의 기준
- 정수형 데이터를 처리하는 경우
--> 컴은 int 형 연산을 가장 빠르게 한다.
ex) 1000의 수를 char 형에 넣지 못한다
=> char 형은 최대 256까지 표현가능
=> int 형이 적절(2의32승)
● sizeof 연산자
- 피연산자 메모리 크기를 반환
#include <stdio.h>
int main()
{
int number = 5;
printf("int 자료형의 크기 : %d \n", sizeof(number));
printf("sizeof(int) ; %d \n", sizeof(int));
system("PAUSE");
return 0;
}
// 자료형 이름 (int) 는 괄호를 꼭 해줘야 한다. sizeof( int )
// 자료형 변수이름은 '()'괄호 생략 가능
// 그냥 괄호사용하는게 헷갈리지 않고 좋다.
● 자료형 선택
- 정수형 데이타를 처리하는 경우
- int가 내부적으로 연산을 가장 빠르게 한다.(정수표현)
- char형 : 문자를 표현하기위한 자료형
- float 형 : 소수이하 6자리까지 오차없이 처리 가능
- double 형 : 소수이하 15자리까지 오차없이 처리 가능
-> 정밀도가 얼마나 유지되나?
=> double에 대한 정밀도를 추구함!! float은 정밀도 낮음
#include <stdio.h>
int main()
{
float byun;
float area;
printf("정삼각형의 변입력 : ");
scanf("%f", &byun);
area = (byun * byun)/2;
printf("정삼각형 넓이 : %f \n", area);
system("PAUSE");
return 0;
}
★ 메모리나 속도도 중요하지만 코딩시,
프로그램은 얼마나 읽기 쉽게 작성을 하느냐?
얼마나 코드를 유연성있게 작성을 하는가? ★
상수는 일반적으로 대문자로 나타내어준다(관례)
초기화는 선언과 동시에 무조건 해주어야한다.
● unsinged 가 붙어서 달라지는 표현
- 기본자료형앞에 unsinged 를 붙여주면 무조건 데이타가 양수가 된다.
> 음수의 데이타표현 범위가 양수로 바뀌게 되
> 양수의 데이타 표현을 기본자료형의 두배로 표현 가능
- 하지만 데이타 크기 자체는 변함 잆다.
ex) unsigned char;
unsigned int ;
- 단, 실수형 자료에는 적용 되지 않음.
● ASCII 코드를 이용한 문자표현
- 컴퓨터는 내부적인 시스템은 2진수만 인식
- 컴퓨터 자체는 문자, 그림, 소리 자료를 숫자로 변환해서
- 2진수로 변환시켜서 저장
ex) A : 65, B : 66 C : 67
=> 컴퓨터와 사람과의 약속(컴퓨터는 문자를 이해못함)
=> ASCII 코드(ANSI : 미국표준협회에 의해 정의)
=> 아스키코드표 참고하세요
● ASCII코드 범위 : 0~127 이하
char 형 변수로 처리 가능!
문자의 표현 : (' ') 를 통해 표현
컴퓨터가 아스키코드값을 확인해서 문자를 숫자로 저장.
ex) char as = 'A'; // A 아스키 코드값 65
char a = 'a' // a 아스키 코드값 97
#include <stdio.h>
int main()
{
char A = 'A';
char B = 'B';
char C = 'C';
char D = 68;
printf("%d \n", A);
printf("%d \n", B);
printf("%d \n", C);
printf("%d \n", D);
printf("%c \n", D);
system("PAUSE");
return 0;
}
● 리터럴(literal) 상수
- 이름을 지니지 않는 상수
ex) 일반숫자
int number = 1 + 2;
해석하자면...
// 1과 2를 메모리상에 올리고
// cpu가 메모리공간에 올라간, 1, 2를 불러들려 계산하고
// 메모리공간에 등록한 number 에다가 연산결과를 저장한다.
char c = 'A' // 문자상수
int in = 10 // 정수상수
double dou = 3.14; // 실수상수
float f = 3.14 // float f = 3.14f
3.14는 double 형(8byte)
float(4바이트) <= (8byte) // 메모리 손실 가능성
접미사를 이용한 상수의 표현
unsinged int
long
....
● 심볼릭(Symblic) 상수 ; 이름을 지니는 상수
const 를 이용한 상수화
ex) cosnt int MIN = 200; // const 키워드 사용
MIN = 100; // 불가
const in MAX; // 변수자체가 쓰레기 값으로 초기화
MAX = 100; // 불가
'프로그래밍 > C' 카테고리의 다른 글
제 9장 조건에 따른 흐름의 분기 - 1 (0) | 2010.07.08 |
---|---|
제 8장 여러형태의 반복문 (0) | 2010.07.08 |
제 6장 scanf함수와 데이타 표현방식의 이해 (0) | 2010.07.08 |
제 5장 변수와 연산자 - 2 (0) | 2010.07.08 |
제 4장 변수와 연산자 (0) | 2010.07.08 |