따라 배우는 C언어 : 4
🙇♀️4
🪐scanf()
int i = 0;
scanf("%i", &i); // & : ampersand
printf("Value is : %i\n", i);
return 0;
🪐입출력 프로그램
int main()
{
float won = 0.0f;
float dollar = 0.0f;
printf("Input won\n");
scanf("%f", &won);
dollar = won * 0.00089f;
printf("Dollar = %f\n", dollar);
return 0;
}
🪐정수와 실수
- 정수 Integers
- 음의 정수, 0, 양의 정수
- 2, -15, 3697
- 내부적으로 2진수
- 실수 Real numbers
- 2.0, 3.16, 2.74, 0.123
- 내부적으로 ‘부동 소수점 floating point’ 표현법 사용
- 뜰 부, 움직일 동 소수점이 떠다닌다!
- 3.14 = 3.14E0 = 3.14e0 = 0.314E1 = 31.4E-1
- 내부적으로 2진수
-
지수 Exponent
- 한 비트를 +-부호 표현에 사용
- 0 : 양수, 1 : 음수
- ‘2의 보수’표현법이 일반적
- 부호 있는 정수와 범위가 다름
-
부동 소수점 수
- 32bit Single Precision
- float a = 1.234f;
-
sign(1bit) exponent(8bit) fraction(23bit)
- 64bit Double Precision
- double pi = 3.141592
- sign(1bit) exponent(11bit) fraction(52bit)
🪐정수 오버플로우
unsigned int i = 0;
sizeof(unsigned int);
sizeof(i);
printf("%u\n", sizeof(unsigned int));
printf("%u\n", sizeof(i));
// 옛날에는 다 printf를 사용했다고 함
unsigned int j = 0b11111111111111111111111111111111; // 32
// 0b는 표준은 아니지만 대부분 지원한다
printf("%u\n", j);
// unsinged 들은 %u를 사용한다
unsigned int u_max = UINT_MAX;
unsigned int u_min = 0;
signed int i_max = INT_MAX;
signed int i_min = INT_MIN;
printf("max of uint by d %d\n", u_max);
// unsigned를 %d로 출력하게 되면 u_max기준 0이 됨
printf("max of uint %u\n", u_max);
printf("min of uint %u\n", u_min);
printf("max of int %d\n", i_max);
printf("min of int %d\n", i_min);
unsigned int u_max = UINT_MAX + 1;
printf("%u\n", u_max);
// i to binary representation
char buffer[33];
_itoa(u_max, buffer, 2);
// 값을 이진수로 표현해줌
// print decimal and binary
printf("decimal: %u\n", u_max);
printf("binary: %s\n", buffer);
// max + 1 : 오버플로우가 발생해서 0이 됨
// 0 - 1 : 오버플로우가 발생해서 max값이 됨
🪐다양한 정수형들
// signed char (1) : char (hhd, c)
// unsinged char (1) : unsinged char (hhu, c)
// signed short int (2) : short (hd)
// unsigned short int (2) : unsinged short (hu)
// signed int (2 or 4) : singed or int (d, i)
// unsinged int (2 or 4) : unsinged (u)
// long int (4) : long (ld)
// unsigned long int (4) : unsinged long (lu)
// long long int (8) : long long (lld)
// unsigned long long int (8) : unsigned long long (llu)
// ()안의 값은 최소크기 이다.
// ()안의 내용은 형식 지정자 이다.
char c = 65;
short s = 200;
unsigned int ui = 3000000000U; // 3'000'000'000U
long l = 65537L;
long long ll = 12345678908642LL; // 12'345'678'908'642ll
printf("char = %hhd, %d, %c\n", c, c, c);
printf("short = %hhd, %hd, %d\n", s, s, s);
printf("unsigned int = %u, %d\n", ui, ui);
printf("long = %ld, %hd\n", l, l);
printf("long long = %lld, %ld\n", ll, ll);
🪐8진수와 16진수
unsigned int decimal = 4294967295;
unsigned int binary = 0b11111111111111111111111111111111;
unsigned int oct = 037777777777;
unsigned int hex = 0xffffffff;
printf("%u\n", decimal);
printf("%u\n", binary);
printf("%u\n", oct);
printf("%u\n", hex);
printf("%o %x %#o %#x %#X\n", decimal, decimal, decimal, decimal, decimal);
🪐고정 너비 정수
#include <stdio.h>
//#include <stdint.h> // also included in inttypes.h
#include <inttypes.h>
int main()
{
int i;
int32_t i32; // 32 bit integer
int_least8_t i8; // smallest 8 bit
int_fast8_t f8; // fastest minimum
intmax_t imax; // biggest signed integers
uintmax_t uimax; // biggest unsigned integers
i32 = 1004;
printf("me32 = %d\n", i32);
printf("me32 = %" "d" "\n", i32);
printf("me32 = %" PRId32 "\n", i32);
return 0;
}
🪐문자형
char c = 'A';
char d = 65; // d = 'A'
printf("%c %hhd\n", c, c); // A 65
printf("%c %hhd\n", d, d); // A 65
printf("%c \n", c + 1); // B
char a = '\a';
printf("%c", a); // 띠링 효과음
printf("\07"); // 띠링 효과음 8진수
printf("\x7"); // 띠링 효과음 16진수
printf("AB\tCDEF\n"); // AB CDEF
printf("ABC\tDEF\n"); // ABC DEF
printf("\\ \'HA+\' \"Hello\" \?\n"); // \ 'HA+' "Hello" ?
연봉 입력하기
float salary;
printf("$______\b\b\b\b\b\b");
scanf("%f", &salary);