chapter 04. 데이터의 표현과 연산(Ⅱ)
진법은 값을 표현할 때 단위기호를 몇 개 사용하느냐이다. 10진법, 8진법, 2진법, 16진법의 표현 진법 변환 진법은 값을 표현할 때 단위기호를 몇 개 사용하느냐이다. 10진법, 8진법, 2진법, 16진법의 표현 - 10진법 : 숫자 0~9까지 10개 - 8진법 : 숫자 0~7까지 8개 - 2진법 : 숫자 0과 1 - 16진법 : 숫자 0~9, a, b, c, d, e, f
▶ 다른 진법의 수를 10진수로 각 자릿수에 2, 8, 16의 거듭제곱을 차례로 곱해서 모두 더한다. 2진수 1010을 10진수로 바꾸는 예 16진수 4b를 10진수로 바꾸는 예
▶ 2진수를 8진수와 16진수로 2진수 3자리는 8진수 1자리로, 4자리는 16진수 1자리로 바꾼다.
▶ 10진수를 다른 진법으로 10진수를 각 진법의 수로 나누면서 나머지를 차례로 적어준다. 10진수 13과 59를 2진수와 8진수로 바꾸는 예 큰 수는 8진수를 먼저 구하고 2진수와 16진수로 바꾸면 편하다.
정수형 상수를 다른 진법으로 표현하는 방법 정수를 다른 진법으로 입출력하는 방법 여러 가지 정수형 자료형 정수의 다양한 표현법과 자료형 정수형 상수를 다른 진법으로 표현하는 방법 정수를 다른 진법으로 입출력하는 방법 여러 가지 정수형 자료형
정수형 상수는 10진법, 8진법, 16진법으로 표현할 수 있다. ▶ 정수형 상수를 다른 진법으로 표현 정수형 상수는 10진법, 8진법, 16진법으로 표현할 수 있다. 8진수와 16진수로 표현할 때는 10진수와의 구별을 위해서 각각 접두어 0과 0x를 붙인다. 표현법만 다를 뿐 같은 값이다. 10진수 상수 12 : 12 8진수 상수 014 : 12 16진수 상수 0xc : 12 printf(“10진수 상수 12 : %d\n”, 12); printf(“8진수 상수 014 : %d\n”, 014); printf(“16진수 상수 0xc : %d\n”, 0xc);
정수를 각 진법에 맞게 입출력 할 때는 적절한 변환문자열을 사용한다. ▶ 정수를 다른 진법으로 출력 정수를 각 진법에 맞게 입출력 할 때는 적절한 변환문자열을 사용한다. 출력 형태 10진수 8진수 16진수 변환문자열 %d %o %x 의미 Decimal Octal heXa-decimal 같은 값 12를 각 진법으로 출력하는 예 printf(“10진수 12를 10진수로 출력 : %d\n”, 12); printf(“10진수 12를 8진수로 출력 : %o\n”, 12); printf(“10진수 12를 16진수로 출력 : %x\n”, 12); 10진수 12를 10진수로 출력 : 12 10진수 12를 8진수로 출력 : 14 10진수 12를 16진수로 출력 : c
변환문자열에 ‘#’플래그(flag)를 사용하면 접두어를 붙여서 출력한다. ▶ 진법에 맞게 접두어 붙여서 출력 변환문자열에 ‘#’플래그(flag)를 사용하면 접두어를 붙여서 출력한다. printf(“10진수 12를 8진수로 출력 : %#o\n”, 12); printf(“10진수 12를 16진수로 출력 : %#x\n”, 12); 10진수 12를 8진수로 출력 : 014 10진수 12를 16진수로 출력 : 0xc
키보드입력 14를 각 진법으로 입력 받을 때 실제 입력되는 값 ▶ 정수를 다른 진법으로 입력 키보드입력 14를 각 진법으로 입력 받을 때 실제 입력되는 값 int val; printf(“정수값을 입력하세요 : ”); scanf(“%o”, &val); // 키보드로 입력되는 값을 8진수로 해석한다. printf(“입력된 값을 10진수로 출력하면 %d입니다.\n”, val); 정수값을 입력하세요 : 14 (엔터) 입력된 값을 10진수로 출력하면 12입니다.
정수형 자료형에는 int형 외에도 여러 가지가 있으며, 크기는 컴파일러에 따라 차이가 있다. ▶ 여러 가지 정수형 자료형 정수형 자료형에는 int형 외에도 여러 가지가 있으며, 크기는 컴파일러에 따라 차이가 있다. (단위 : 바이트) 컴파일러 운영체제 환경 char short int long TC++3.0 도스 1 2 4 VC++6.0 윈도즈 gcc 유닉스 특별한 경우가 아니면 정수형 자료형으로 int형을 사용한다. - int형은 현재의 시스템에서 가장 빠르게 처리될 수 있도록 구현 되므로 int형을 사용하는 것이 가장 좋다.
정수값이 저장되는 방법 정수값의 비트 표현 정수형 변수에 저장되는 값의 범위 양수값만을 저장하는 정수형 변수
▶ 정수값의 비트표현 정수값은 2진수로 저장된다. 2진수 비트열에서 가장 왼쪽의 비트는 MSB(Most Significant Bit, 가장 오른쪽의 비트는 LSB(Least Significant Bit)가 된다.
자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다. ▶ 정수형 변수에 저장되는 값의 범위 자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다. 각 정수형 자료형에 저장할 수 있는 값의 범위 (VC++6.0 기준) 자료형 크기 계산식 저장 값의 범위 char 1바이트(8비트) 28 - 1 0 ~ 255 short 2바이트(16비트) 216 - 1 0 ~ 65535 int, long 4바이트(32비트) 232 - 1 0 ~ 4294967295
양수값 전용으로 사용할 때는 unsigned예약어를 사용한다. ▶ 정수형 변수를 양수값 전용으로 사용하자. 양수값 전용으로 사용할 때는 unsigned예약어를 사용한다. unsigned 변수로 입출력할 때는 %u변환문자열을 사용한다. unsigned char uch; // uch는 unsigned형으로 선언 printf(“unsigned char형에 최대값을 입력하세요 : ”); scanf(“%u”, &uch); // %u변환문자열을 사용하여 입력한다. printf(“unsigned char형에 저장된 값은 : %u\n”, uch); // %u로 출력 unsigned char형에 최대값을 입력하세요 : : 255 (엔터) unsigned char형에 저장된 값은 : 255
▶ 정수값은 모듈러(modular) 연산에 의해 저장된다. 자료형의 최대값을 넘는 값을 입력하면 범위를 넘어선 나머지 값만 저장된다. unsigned char형에 최대값을 입력하세요 : : 257 (엔터) unsigned char형에 저장된 값은 : 1
음수까지 포함한 정수형 음수값은 2의 보수로 저장한다. 음수값을 포함한 저장 범위
▶ 음수값은 2의 보수로 저장한다. 4비트 크기의 자료형에서 양수와 음수로 사용되는 비트표현
음수값을 2의 보수로 표현하는 것이 연산속도가 빠르다. ▶ 음수값은 2의 보수로 저장한다. 이진수 1011의 값은 얼마인가? - 가장 왼쪽의 비트가 1이므로 음수값을 표현하는 비트열이다. - 2의 보수로 바꾸면 음수값의 크기를 알 수 있다. - 그 값에 마이너스(-)를 붙이면 저장된 음수값이다. 음수값을 2의 보수로 표현하는 것이 연산속도가 빠르다.
자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다. ▶ 음수값을 포함한 저장 범위 자료형의 비트수에 따라 저장되는 값의 범위는 다음과 같다. 소 각 정수형 자료형에 저장할 수 있는 값의 범위(음수값 포함) (VC++6.0 기준) 자료형 크기 계산식 저장 값의 범위 char 1바이트(8비트) -27 ~ 27-1 -128 ~ 127 short 2바이트(16비트) -215 ~ 215-1 -32768 ~32767 int, long 4바이트(32비트) -231 ~ 231-1 -2147483648 ~ 2147483647 정수형 자료형은 기본적으로 signed로 선언된다.
▶ signed 자료형에서 modular연산 양의 최대값 다음의 수는 음의 최대값이 된다. char ch; // 기본적으로 signed형으로 선언된다. printf(“char형에 최대값을 입력하세요 : ”); scanf(“%d”, &ch); // %d변환문자열을 사용하여 입력한다. printf(“char형에 저장된 값은 : %d\n”, ch); // %d로 출력 char형에 최대값을 입력하세요 : 128 (엔터) char형에 저장된 값은 : -128 // 음수값이 출력된다!!
실수형 상수의 표현법 지수 형태의 입출력 여러 가지 실수형 자료형 실수값의 비트표현과 저장범위, 유효숫자 실수값의 표현과 자료형 실수형 상수의 표현법 지수 형태의 입출력 여러 가지 실수형 자료형 실수값의 비트표현과 저장범위, 유효숫자
아주 크거나 아주 작은 실수값은 지수형태로 표현한다. ▶ 실수형 상수의 지수 표현법 아주 크거나 아주 작은 실수값은 지수형태로 표현한다. 지수형태로 표현된 실수형 상수의 예 0.5e01 -2.002e3 14142e-4 0.0625E+02 +.5e-9 소수점 이하 출력 자리수를 조절하는 방법 0.5e01 -> 5 +.5e-9 -> 0.0000000005 printf(“0.5e01 -> %.0lf\n”, 0.5e01); printf(“+.5e-9 -> %.10lf\n”, +.5e-9);
실수값을 지수 형태로 입출력할 때는 %le변환문자열을 사용한다. ▶ 지수형태의 입출력 방법 실수값을 지수 형태로 입출력할 때는 %le변환문자열을 사용한다. printf(“소수점형 상수 10002.0을 지수 형태로 출력 : %le\n”, 10002.0); printf(“지수형 상수 0.00625e3을 지수 형태로 출력 : %le\n”, 0.00625e3); 소수점형 상수 10002.0을 지수 형태로 출력 : 1.000200e+004 지수형 상수 0.00625e3을 지수 형태로 출력 : 6.250000e+000 지수형태로 입력 받아서 소수점 형태로 출력하는 예 double db; printf(“실수값을 지수 형태로 입력하세요 : ”); scanf(“%le”, &db); printf(“입력된 값을 소수점 형태로 출력하면 : %lf\n”, db); 실수값을 지수 형태로 입력하세요 : 314e-2 (엔터) 입력된 값을 소수점 형태로 출력하면 : 3.140000
실수형 자료형에는 double형 외에도 여러 가지가 있으며, 크기는 컴파일러에 따라 차이가 있다. ▶ 여러 가지 실수형 자료형 실수형 자료형에는 double형 외에도 여러 가지가 있으며, 크기는 컴파일러에 따라 차이가 있다. (단위 : 바이트) 컴파일러 운영체제 환경 float double long double TC++3.0 도스 4 8 10 VC++6.0 윈도즈 gcc 유닉스 16 특별한 경우가 아니면 실수형 자료형으로 double형을 사용한다. - float형은 오차가 발생할 가능성이 많으므로 적당한 크기와 정밀도를 가지는 double형을 주로 사용하는 것이 좋다.
double형 변수(8바이트)에 실수값을 저장하는 예 ▶ 실수값의 비트 표현 실수값은 IEEE754표준에 따라 저장된다. - 한정된 크기의 기억공간에 최대한 효율적으로 실수값을 저장하기 위해서는 특별한 약속에 따라 저장한다. double형 변수(8바이트)에 실수값을 저장하는 예 - 가장 왼쪽의 비트는 부호비트이며 양수는 0, 음수는 1을 저장한다. - 부호비트 다음부터 11비트는 지수값을 저장한다. - 나머지 52비트에 소수값을 저장한다. 실수형 자료형은 signed와 unsigned를 사용하지 않는다. - 실수형 자료형은 항상 signed형태로 사용되는 것이다.
double형 변수의 저장값의 범위는 대략 다음과 같다. ▶ 저장 범위와 유효숫자 double형 변수의 저장값의 범위는 대략 다음과 같다. - 최대값은 지수 부분과 소수 부분이 모두 가장 큰 값을 가질 때이며 최소값은 부호가 반대인 경우이다. double형 값의 유효숫자는 15자리이다. - 실수값은 값의 크기와는 별도로 정확한 값을 표현하는 데에는 한계가 있다. double exact; exact = 0.1234567890123456789; // 유효숫자가 많아서 정밀한 값 printf(“유효숫자가 많은 값 : %.20lf\n”, exact); 유효숫자가 많은 값 : 0.12345678901234568000 // 뒷부분에 오차가 생김
문자상수는 아스키코드값에 해당하는 정수형 상수와 같다. 문자 데이터의 저장 문자 데이터는 아스키코드값으로 저장된다. - 아스키코드(ASCII code)값은 컴퓨터에서 사용되는 각 문자들을 어떤 비트열로 표현할 것인지에 대한 약속이다. - 128개의 문자에 대해 각각 1바이트(8비트)의 비트열로 표현하도록 약속한다. - 아스키코드값의 몇 가지 예(괄호는 각각 16진수와 10진수) 문자상수는 아스키코드값에 해당하는 정수형 상수와 같다. - 문자상수를 연산하여 대문자를 소문자로 바꾸는 예
자료형의 크기를 확인할 때는 sizeof연산자를 사용한다. 자료형의 크기 확인 자료형의 크기를 확인할 때는 sizeof연산자를 사용한다. - sizeof연산자는 피연산자의 데이터 크기를 바이트 단위로 계산해준다. 다양한 데이터의 크기를 확인하는데 사용할 수 있다. printf(“%d바이트\n”, sizeof(‘V’)); printf(“%d바이트\n”, sizeof(35)); printf(“%d바이트\n”, sizeof(1.65)); printf(“%d바이트\n”, sizeof(1.65f)); printf(“%d바이트\n”, sizeof(“abc”)); printf(“%d바이트\n”, sizeof(“K”)); printf(“%d바이트\n”, sizeof(10/4)); printf(“%d바이트\n”, sizeof(10/4.0)); 1바이트 // 문자 상수의 크기 4바이트 // 정수형 상수의 크기 8바이트 // 실수형 상수의 크기 4바이트 // 실수형 상수의 크기 4바이트 // 문자열 상수의 크기 2바이트 // 문자열 상수의 크기 4바이트 // 수식의 결과값의 크기 8바이트 // 수식의 결과값의 크기