전체 글 58

20200918 테스트 오답노트

오늘은 테스트를 치뤘다 그리고 틀렸던 부분과 지적받았던 부분에 대해 기록 남긴다 1. c++ virtual 함수 2. 함수 내 static 변수는 메모리에 언제 등록이 되는가? 3. volatile 키워드 4. 캐시 히트율 1. c++ virtual 함수 아래 코드의 출력결과는? #include class A { public: virtual void Func() { printf_s("A::Func\n"); } }; class B : public A { void Func() { printf_s("B::Func\n"); } }; class C : public B { void Func() { printf_s("C::Func\n"); } }; int main() { C c; A* a = &c; a->Func()..

공부 2020.09.18

20200917 공부

아이템 확률 퀵정렬 문자열 링크드리스트 아이템 확률 아이템 확률대로 아이템을 뽑아보자 아이템, 빈도수 A, 20000 B, 1 C, 20000 D, 30000 A + B + C + D = 70001 1부터 70001 사이의 숫자를 랜덤하게 생성 if 숫자가 20000 보다 작으면 A아이템 else if 숫자가 20001 보다 작으면 B아이템 else if 숫자가 40001 보다 작으면 C아이템 else if 숫자가 70001 보다 작으면 D아이템 100만번 뽑아서 각각의 아이템이 나온 개수 출력 #include #include #include int items[] = { 20000, 1, 20000, 30000 }; int main() { srand(time(0)); int itemRange[4]; in..

공부 2020.09.18

20200916 공부

엔디언 함수포인터 switch case 구조체 패딩 엔디언 메모리 저장 방법 리틀엔디언 하위->상위 빅엔디언 상위->하위 함수포인터 함수포인터를 배열에 넣고 사용해보기 #include int sum(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int main() { int (*calcs[3])(int, int); calcs[0] = sum; calcs[1] = sub; calcs[2] = mul; int a = calcs[0](10, 20); int b = calcs[1](20, 10); int c = calcs[2](10, 2); return 0; ..

공부 2020.09.16

BMP 파일 이미지 데이터 읽기

BMP 파일의 구조 상관없이 이미지 데이터를 읽어서 출력하고 싶었다 나중에 복붙해서 사용할 용도이기도 하다 컬러비트가 다르거나 BITMAPINFOHEADER의 크기가 달라도 32비트 이미지 데이터형식으로 읽어오도록 코드를 작성했다 char* imgData; int width; int height; int colorByte; int pitch; int imgSize; bool LoadDib32Bit(const wchar_t* fileName) { FILE* file; if (_wfopen_s(&file, fileName, L"rb") != 0) return false; BITMAPFILEHEADER bmfh; fread_s(&bmfh, sizeof(bmfh), sizeof(bmfh), 1, file); i..

공부 2020.09.13

20200905 공부

소켓 옵션 코딩 연습 소켓 옵션 소켓 옵션 관련 함수 소켓 옵션을 설정할 때는 setsockopt() 함수를 사용 현재 설정된 소켓 옵션 값을 얻을 때는 getsockopt() 함수를 사용 setsockopt() 함수와 달리 getsockopt() 함수는 마지막 인자가 값-결과 인자임에 주의 SOL_SOCKET 레벨 소켓 옵션 optname optval 타입 get set 설명 SO_BROADCAST BOOL o o 브로드캐스팅 데이터 전송 허용 여부 SO_KEEPALIVE BOOL o o 주기적으로 연결 상태 확인 여부 SO_LINGER LINGER{ } o o 소켓 송신 버퍼에 미전송 데이터가 있을 때 closesocket( ) 함수의 리턴 지연 시간 설정 SO_SNDBUF SO_RCVBUF int ..

공부 2020.09.05

20200904 공부

1. 문제풀이 2. 스레드 동기화 3. UDP 서버 - 클라이언트 4. 브로드캐스팅 1. 문제풀이 1. DDB와 DIB의 차이에 대해 서술하시오. BMP파일은 어떤 쪽에 해당하며, 우리가 WinAPI를 통해 그림을 찍으려면 BMP파일을 어떻게 해야 되는지 DIB와 DDB관점에서 설명하시오. DDB (Device Dependent Bitmap) GDI에서 DC와 연결되는 Bitmap을 DDC라 한다 출력 장치에 종속적 이미지의 크기, 색상 등 기본적인 정보와 이미지 데이터로 구성 DIB (Device Independent Bitmap) 출력 장치에 독립적 DDB에 비해 색상 테이블, 해상도 정보 등의 추가 정보를 가지므로 장치에 종속되지 않음 BMP파일은 DIB에 해당한다 출력은 .. 다른점을 잘 모르겠다..

공부 2020.09.04

20200903 공부

1. 문제 만들기 2. 멀티스레드 1) 스레드 생성과 종료, 인자 전달 연습 2) 스레드 우선순위 변경 연습 3) 스레드 실행 제어와 종료 기다리기 연습 4) 멀티스레드 TCP 서버 1. 문제 만들기 1) x86 함수 호출 규약 (1), (2), (3) 에 해당하는 값을 채우시오. 규약 인자 전달 순서 인자 전달 매체 Stack을 정리하는 함수 cdecl ← Stack ( 2 ) stdcall ( 1 ) Stack ( 3 ) fastcall ← Register + Stack Callee 2) 함수 포인터 ( ? ) 부분을 채워서 코드를 완성하시오 int Sum(int a, int b) { return a + b; } int main() { ( ? ) int res = FuncSum(10, 20); ret..

공부 2020.09.03

20200902 공부

1. 데이터 전송하기 2 1) 가변 길이 데이터 전송 연습 2) 고정 길이 + 가변 길이 데이터 전송 연습 3) 데이터 전송 후 종료 연습 1. 데이터 전송하기 2 1) 가변 길이 데이터 전송 연습 클라이언트 코드 수정 // 가변 길이 데이터 전송 // EOR = '\n' const int bufSize = 50; char buf[bufSize]; const char* testData[] = { "안녕하세요", "반가워요", "오늘따라 할 이야기가 많을 것 같네요", "저도 그렇네요" }; for (int i = 0; i < 4; i++) { int len = strlen(testData[i]); strcpy_s(buf, bufSize, testData[i]); buf[len++] = '\n'; ret ..

공부 2020.09.02

20200901 공부

1. 에코서버 만들기 2. 데이터 전송하기 3. 문제풀이 4. Win32 API 게임 작업 1. 에코서버 만들기 서버 코드 더보기 #include #include #include #pragma comment(lib, "Ws2_32.lib") // 서버 프로그램 int main() { // 윈속 초기화 WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf_s("error WSAStartup()\n"); return 1; } // 소켓생성 SOCKET servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (servSock == INVALID_SOCKET) { printf_s("error socket..

공부 2020.09.02