선생님 안녕하세요! 수업 중 강의를 듣다가 보수에 대한 이해가 되지 않아 질문드립니다. 보수란 보충해주는 수 라고 알고있습니다. 강의에서 1의 보수는 어떤 수에 대해서 더해서 1 이 되는 수라고 말씀하셨고 1의 보수를 구하는 예시로 2진수 1100에 대한 1의 보수를 구하는 방법으로 NOT 연산을 하여 0011을 만들 수 있었습니다. 그럼 1100에 대한 1의 보수가 0011이라고 이해했습니다. 즉 1100 + 0011을 하면 10진수 1 또는 2진수 0001 이 나와야한다고 이해했습니다. 그러나 실상은 2진수 1111 로 10진수로는 15 가 되어버립니다. 분명 1의 보수를 구한거면 더해서 1되는 수라고 말씀하셨는데 15가 계산이 되는데 제가 어느 부분에 대한 개념을 못잡고 있는걸까요?
nData 의 공간에 10 이라는 값이 리틀 엔디언 방식으로 담기고 pnData 의 공간에 nData의 64비트 주소가 리틀 엔디언 방식으로 담겨야한다고 이해했습니다. 혼자서 실습을 해보는데 pnData 에 10이 담겨있고 nData에 마우스 커서를 가져다 대봤으나 주소가 뜨지 않습니다. 무엇이 문제일까요
안녕하세요, 강의 항상 잘 듣고 있습니다. FILE* fp = NULL; fopen_s(&fp, "Test.txt", "w'); if ( fp == NULL ) { puts("ERROR: Failed to open file") } Q1. 파일 생성, 개방, 폐쇄 강의에서 위 코드를 설명해주실 때 fp가 fopen_s가 할당하는 '무언가'의 주소를 담고 있다고 말씀하셨는데, 무언가는 파일 입출력은 위한 힙 메모리영역이 할당되는것인지 아니라면 무엇이 할당되는 것인지 궁금합니다. Q2. fp의 주소는 NULL 값으로 초기화 되었는데, fopen_s()함수에 의해 fp가 "Test.txt" 파일이 위치한 곳의 주소를 담게되는 것인지 궁금합니다. Q3. fopen_s(&fp, "Test.txt", "r') ; 로 코드를 바꾸어 실행시 해당 파일이 없는 경우엔 fp값이 여전히 NULL 이고 따라서 if문의 에러메시지가 출력되는게 맞을까요? 질문이 많아서 죄송합니다;;
안드로이드 어플리케이션 수준에서 직접 시큐어 모니터를 활욜한 apk을 작성하여 직접 디버깅하고, 유저 권한에서 어디까지 커널에 대한 활용이나 모니터 사용, 보호수준에 대해서 활용을 확인해 보고 싶습니다. 사용가능한 코드나 링크를 제공해주시면 학습에 더 큰 도움이 될거 같은데 자료가 있으면 제공해 주시면 감사하겠습니다.
강의 내용에 보면, char szBuffer[8] 통해 8바이트 자동 할당되었는데, \0이 마지막에 붙어 1바이트 초과하여 ndata 스택 메모리를 침범한다는 말씀을 하셨습니다. 그렇다면, 문자열을 N 만큼 입력받고 싶다면 항상 N+1의 메모리 공간을 할당해야할까요? 스택, 힙 두 경우에 모두 해당되는지 궁금합니다.
#include <stdio.h> int main(void) { int nInput = 0; int answer = 0; scanf_s("%d", &nInput); answer = (nInput >= 80) ? printf("pass") : printf("fail"); printf("%c\n", answer); return 0; } 이 코드가 왜 실행되는지 모르겠어요 문자열 %s가 아니라 왜 %c로 했는데 되는지 궁금해요 %s로 해도 실행은 되는데 이렇게 초록색 줄로 그이고 실행 했을 때 처리 속도도 느린데 왜 그런건가요? answer에 printf 함수가 들어가면 어떻게 되는 건가요? 나중에 이런것도 설명 해주시나요?
Visul Studio 로 x86 이든 x64든 한번 컴파일을 해서 Intel CPU 와 AMD CPU 에서 동일하게 실행이 가능하다면 Intel 과 AMD 의 명령어세트가 동일하고 제공하는 레지스터들이 동일한 것인지 갑자기 궁금증이 들어 질문 남깁니다! 좋은 강의 감사드립니다!
안녕하세요, 저는 이 강의에서 버블정렬이라는 단어를 듣기전까지 버블정렬이 뭔지도 몰랐습니다. 그래서 인터넷에서 버블정렬을 검색 후 (답안지는 보지 않았습니다.) 이미지 한장을 보고 어떤 방식으로 진행하는지만 보고 제 스스로 구현을 해봤습니다. 총 두가지 방법으로 구현을 해봤는데요 첫번째 방법은 선생님의 설명을 듣기 전 문제만 보고 스스로 해봤고 두번째 방법은 선생님의 버블정렬 개념 설명을 듣고 설명의 방식대로 구현을 해봤습니다. 첫번째 방법 두번째 방법 두가지 방법 모두 버블정렬 개념에 맞게 작성 된 로직인지 체크 해주시면 감사하겠습니다!
안녕하세요, 제가 이해한바가 맞는지 확인하고 싶습니다. 기본적으로 H/W장치가 있고 그 장치를 컴퓨터에 연결을 하면 S/W Kernel단에 해당 장치의 대한 디바이스 드라이버가 있고 S/W Kernel단 OS에 해당 디바이스 드라이버를 처리하기 위한? 대응이 되는 요소가 있고 OS는 해당 장치를 추상화한 File이라는 걸 User단에 만들어준다. 해당 File에는 Buffer라는 개념이 존재한다. User단에서 해당 장치를 사용하기 위해선 OS가 만든 장치를 추상화한 File을 사용하는 프로그램을 만들어서 사용해야 한다. 이걸로 프로세서와 장치는 RWX를 할 수 있는 조건이 갖춰진다. 그리고 같은 H/W단에 있는 CPU와 장치는 Interrupt라는 걸로 통신(제어)하게 된다. 컴퓨터 외에 H/W장치는 크게 두가지로 볼 수 있다. 입력 장치와 출력 장치가 있다. 입력 장치는 마우스, 키보드, 캠, 마이크 등이 있고 / 출력 장치는 모니터, 스피커 등이 있다. 입력 장치들은 데이터들을 추상화한 File Buffer로 전송하고 이 데이터들을 (Read)사용하기 위해선 해당 File의 대한 프로그램을 개발해야한다. 출력 장치들은 출력 장치를 추상화한 File을 사용하는 프로그램을 개발한 다음 Read프로그램의 데이터들을 가져와서 가공을 한 다음 write(쓰기)를 하면 File Buffer에 데이터들이 차곡차곡 쌓은다음 출력 장치로 가게 되어서 해당 데이터들을 출력 장치를 통해 볼 수 있게 되는 것이다. 이것이 강의에서 나온 키보드로 Hello World 같은 프로그램 만들고 -> 모니터 콘솔화면으로 결과물을 볼 수 있는 구조다. 라고 이해했는데 이해한바가 맞을까요? 또 Buffer라는 것도 입력 or 출력장치로 R/W을 했을 때 데이터들을 차곡차곡 모아서 한번에 전송하기 위함인가요? 예를 들어 숙소A, 버스B, 건설현장C가 있을 때 버스B가 숙소A로부터 노동자들을 건설현장C로 수송해야할 때 노동자들을 한명씩 태워서 수송하면 오래걸리지만 버스B의 상한선까지 노동자들을 가득 태워 한번에 수송하면 노동자들을 금방 보낼 수 있는 것 처럼 Buffer라는 것도 OS가 H/W입출력 장치로 부터 데이터들을 효율적으로 처리하기 위한 기법 중 하나다. 즉 OS에서 데이터들을 효과적으로 처리하기 위한 데이터 처리기법으로 Buffer라는걸 만들었다. 고 이해했는데 이해한 개념이 맞을까요?
안녕하세요. 프로그래밍 언어에 대한 기초지식 없이 C언어를 시작해보려고 합니다. 인프런 강의만 가지고 공부를 하면 되는 것인지, 혹은 복습할 때 다른 외부의 자료들도 참고하면서 공부를 해야 하는 것인지 궁금합니다. 지금 '섹션10. 표준 입출력' 의 '문자 입출력' 을 보고 있는데, getchar putchar _getch 와 같은 명령어를 통해서 문자 입출력이 이루어지는 것을 알려주셨는데, 이걸 따라하면서 한번 실제로 코드입력해서 동작하는지 보고 넘어가면 될까요? 아니면 이 getchar, putchar, _getch 명령어들을 이용해서 따로 또 강의영상에는 없는 다른 연습을 해야 하는걸까요? 온전히 본 강의의 영상에 있는 부분들만 따라가면 되는건지.. 아니면 따로 또 검색이나 해야 할 것들을 찾아서 복습을 해야 하는것인지 궁금합니다.
안녕하세요. 함수 포인터를 사용할 때와 사용하지 않을 때 기능적인 차이점은 알겠지만, 함수 포인터를 사용했을 때의 이점과 왜 사용하는지 알 수 있을까요? 그냥 메인함수에서 함수 포인터를 사용하지 않고 일반 함수를 호출 할 때와 코드 길이는 비슷한 것 같은데 어떤 이점이 있는지 언제 쓰면 좋은지 쉽게 설명해주시면 감사드리겠습니다.