[5일차](홍정모의따배c)정수와 실수2
*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다. 따로 출처 표시나 과제표시
안한 모든 코드와 사진자료의 출처는 본 강의의 교수님 입니다.
정리는 다시한번 제가 보기위함과 어떤강의인지 알려드리는 것이고
제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소
생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면
'인프런- 홍정모의 따라하며 배우는c' 과정을 수강하시길 바랍니다.
정수의 오버플로우
#include <stdio.h>
int main()
{
unsigned int i = 0;
printf("%u\n", sizeof(unsigned int));//출력하는데이터가 언싸인드면 %u를 쓰는게 관례다
printf("%u", sizeof(i));
}
#include <stdio.h>
#include <limits.h> // UINT_MAX를 끄집어내온 출처인거같다
int main()
{
unsigned int i = 0b11111111111111111111111111111111; //32비트 최대값
//2의 32승을 구해라
unsigned int u = UINT_MAX; //UINT_MAX unsigned int 의 최대값
printf("%u\n", i); //unsigned 수는 무조건 %u
printf("%u\n", u);
return 0;
}
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned int u_max = UINT_MAX;
unsigned int u_min = 0; //unsigned int는 최소값이 정해져 있지 않다
signed int i_max = INT_MAX; //signed int 의 최대값
signed int i_min = INT_MIN;
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);
return 0;
}
#include <stdio.h>
#include <limits.h>
int main()
{
unsigned int u_max = UINT_MAX + 1; //오버플로우 발생시키기
printf("%u", u_max);
return 0;
}
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int main()
{
unsigned int u_max = UINT_MAX;
char buffer[33];
_itoa(u_max, buffer, 2); // 변수가 담고있는 숫자를 2진수로 바꿔준다.
printf("decimal: %u\n", u_max);
printf("binary: %s\n", buffer);
return 0;
}
이렇게 컴파일하면
xcode에선 무슨일인지 컴파일 안된다
다른 c환경이라 그렇다고 한다.
원래는 컴파일 하면
데시멀에 10진수로 2의 32승
바이너리에 11111111111111111111111111111111
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int main()
{
unsigned int u_max = UINT_MAX + 1; //더하기1했다
char buffer[33];
_itoa(u_max, buffer, 2);
printf("decimal: %u\n", u_max);
printf("binary: %s\n", buffer);
return 0;
}
이러면 오버플로우 돼서 0이라고 뜬다
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int main()
{
unsigned int u_max = 0 - 1; //가장 작은 값보다 하나를 뺐다.
char buffer[33];
_itoa(u_max, buffer, 2); // 변수가 담고있는 숫자를 2진수로 바꿔준다.
printf("decimal: %u\n", u_max);
printf("binary: %s\n", buffer);
return 0;
}
그러더니 둘다 최댓값이 나왔다
8진수와 16진수
#include <stdio.h>
int main()
{
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", decimal, decimal, decimal, decimal, decimal);
return 0;
}
출력하고 싶은 결과에 따라 %o %x %#o %#x %#X 등 다르게 나타낼 수 있다
문자형
#include <stdio.h>
int main()
{
char c = 'A'; //c에 A라는 문자값을 넣는다.
char d = 65; //d에 아스키코드 65를 넣는다.
printf("%c %hhd\n", c, c); //c를 문자형으로 출력,c를 정수형으로 출력
printf("%c %hhd\n", d, d);
//d를 문자형으로 출력, d를 정수형으로 출력
return 0;
}
#include <stdio.h>
int main()
{
char c = 'A'; //c에 A라는 문자값을 넣는다.
char d = 65; //d에 아스키코드 65를 넣는다.
printf("%c \n", c + 1); //c에 1을 더한만큼에 해당하는 아스키코드를 출력한다
return 0;
}
#include <stdio.h>
int main()
{
char c = 'A'; //c에 A라는 문자값을 넣는다.
char d = 65; //d에 아스키코드 65를 넣는다.
char a = '\a'; //a는 beep소리 한번을내는 행위를 출력한다.
printf("%c", a); // a를 문자형으로 출력한다
return 0;
}
#include <stdio.h>
int main()
{
float salary;
printf("$______\b\b\b\b\b\b");//백슬래쉬 6번 앞에한상태에서 값을 출력한다
scanf("%f", &salary); //salary라는 float변수를 입력해라
return 0;
}
#include <stdio.h>
int main()
{
printf("AB\tCDEF\n");//AB하고 탭 CDEF하고 한칸점프
printf("ABC\tDEF\n");
return 0;
}
#include <stdio.h>
int main()
{
printf("\\ \'HA+\' \"Hello\" \?\n");//이스케입시퀀스로 출력에
// 제한이있는 문자들 출력하기 printf안에 무슨 찜찜한문자 넣으려거든
//앞에\넣는 습관을 들이자
return 0;
}
부동소수점형
#include <stdio.h>
#include <float.h>
int main()
{
printf("%u\n", sizeof(float));
printf("%u\n", sizeof(double)); //float의 두배메모리를 사용해서 double이다.
printf("%u\n", sizeof(long double)); //long double도 8이나온다. gcc에선 16이 나온다.
float f = 123.456f; //float는 리터럴 f를 붙여주는게 좋다
double d = 123.456; //오히려 double은 안붙여도 무방
float f2= 123.456f;
double d2 = 123.456f;//float를 double에 넣으면 크기가 float이 더 작기 때문에 ㄱㅊ
int i = 3;
float f3 = 3.f; // 3.0f .을찍어줘야 한다 .없으면 정수로 취급될 수 있기 때문
double d3 = 3.; // 3.0. double도 마찬가지
float f4 = 1.234e10f;
float f5 = 0xb.aP1; //16진수다. e대신 p를 적은것
double d5 = 1.0625e0;
printf("%f %F %e %E\n", f, f, f, f);
printf("%f %F %e %E\n", d, d, d, d);
printf("%a %A\n", f5, f5);
printf("%a %A\n", d5, d5);
}
불리언형
#include <stdio.h>
#include <stdbool.h> // 불자료형을 갖기 위해서 불헤드를 갖고온다
int main()
{
printf("%u\n", sizeof(_Bool)); //특이하게 얘는 앞에 대문자가 나온다 bool의 크기는 1바이트
_Bool b1;
b1 = 0; //Bool_자료형에서는 0은 false고 1은 트루다 레알 참트루
b1 = 1; //true
printf("%d\n", b1);
bool b2, b3;
b2 = true;
b3 = false;
printf("%d %d\n", b2, b3);
return 0;
}