본문 바로가기

전체 글20

getchar() 버퍼 비우는법 while (getchar() != '\n') continue; 위 코드는 입력 버퍼를 비우는 행위를 의미합니다. int c = getchar(); 예를 들어 이때 입력을 'y' 라고 했다면 c 에는 'y' 문자의 아스키코드 값이 저장되어 있겠지요. 이런 상태에서 질문자님께서 하신대로 getchar 부분을 c 로 바꿔 while ( c != '\n' ) continue; 이렇게 하게되면 c 에는 y의 아스키코드 값인 121 정수가 들어있기때문에 c는 영원히! 절대! '\n' 가 될 수 없습니다. 그냥 c는 값을 저장하고 있는 변수일 뿐이기 때문에 임의로 c = '\n'; 이런식으로 바꿔주지 않는 이상 계속 121 값을 저장하고 있는 상태입니다. 따라서 while 문이 더 이상 돌지 않으려면 c=='\n'.. 2021. 6. 15.
printf() 작동원리 저렇게 순차적으로 왼쪽부터 아래에 차례대로 스택에 저장되는데 float 의 경우엔 원래 4byte 이지만 printf 함수로 인해 double로 저장됨 고로 8byte를 할당받음.(왜그런진 모름) 고로 저렇게 8byte 8byte 4byte 이렇게 차례대로 저장되는데 만약에 변환지정자가 decimal 일경우 얘 같은경우 한번에 4byte만 읽어들이므로 위에 차례대로 4byte 4byte 4byte 이렇게만 읽고 나머지 데이터는 안읽음.. 고로 데이터가 막 뒤엉켜서 이상한 값이 나오게됨. 또, float double은 애초에 실수형인데 이걸 lld 같은 읽어들이는 데이터크기는 8byte로 똑같지만 원래 정수형한테만 쓰는걸 써버리면 역시나 마찬가지로 이상한 값이 나오게 된다. 고로 데이터를 출력할땐 그에 맞.. 2021. 6. 2.
형식 지정자에 따른 오버, 언더플로우 언더플로우도 마찬가지 - 2021. 5. 28.
컴퓨터의 작동 원리 ROM BIOS - ROM 인걸로 보아 읽기만 가능하고 쓸수는 없다. BIOS의 약자가 Basic Input Output System 인걸로 보아 말그대로 기본 입출력을 위한 시스템이라고 볼 수 있을듯? CPU는 직접적으로 보조기억장치에 접근할 수 없음. 오로지 주기억장치(RAM)에만 상호작용함. 운영체제(OS)는 보조기억장치에 저장됨. 그렇다면 CPU는 어떻게 운영체제를 불러올 수 있는것인가? 보조기억장치에 저장된 운영체제에서 CPU가 읽어드릴 운영체제 정보를 RAM으로 복사해서 읽는방식임. 운영체제 뿐만아니라 그외 프로그램도 다 이런 똑같은 방식일걸로 보인다... 시스템 프로그램 - 컴퓨터 바탕화면을 바꿀때 사용하는 프로그램같은 운영체제의 핵심 프로그램이라고 하기에는 뭐한 그런 프로그램들???? 응용.. 2021. 5. 14.
수학적 귀납법과 재귀, 분할 정복 수학적 귀납법 수학 증명 기법중 하나 프로그래밍에서 자주 쓰이니 꼭 알아두자 증명방법 기본 단계 : 시작점 P(0)이 참임을 증명 귀납 가정 : 임의의 자연수 K에 대해 P(K)가 참일때, P(K + 1)도 참일 것이라는 가설을 세움. P(K) → P(K + 1) 귀납 단계 : 이 가설이 참임을 증명 결론 : 그럼 P(0)이 참이니 P(1)도 참이고, P(1)이 참이니 P(2)도 참. 이렇게 연쇄적으로 참이 돼서 모든 자연수 n에 대하여 P(n)이 참인것이 증명이됨. ex) 도미노게임을 이용한 예시 첫번째 도미노와 두번째 도미노를 일정한 간격에 두면 쓰러진다고 증명 마찬가지로 k번째 도미노와 k+1번째 도미노도 똑같을 거라 가정 실제로 된다는 걸 증명 첫번째 도미노부터 끝 도미노까지 쓰러진다는게 증명됨 .. 2021. 5. 12.
비트 마스킹 보통 우리가 짝수, 홀수를 구분한다면 코드를 이렇게 짤 것이다. num 의 짝, 홀수 구분코드 if(num % 2 == 0){} → num 이 짝수면 true if(num % 2 == 1){} → num 이 홀수면 true 여기서, 위의 홀수 코드는 if(num % 2 != 0){} → num 이 홀수면 true 이 코드가 더 좋다. 왜냐? 컴퓨터에서 0이랑 비교할 수 있으면 비교하는게 무조건 더 좋기 때문. (속도가 좀 더 빠르다. 근데 그렇게 큰 차이x) 이걸 비트 연산으로도 짝, 홀수를 구분할수가 있다. 2진수의 맨 오른쪽 비트가 0이면 짝수, 1이면 홀수임을 활용한것이다. if( (num & 0x1) == 0){} → num 이 짝수 즉 2^0 자리가 0이면 AND 연산으로 인하여 true가 됨... 2021. 5. 11.