전체 글 19

헷갈리기쉬운 reference, const !!!!!!!!!!!

아래 코드는 const 와 reference 를 최대한 많이 때려박은 코드임. 최대한 때려박을수록 좋다 using namespace std; //산술 연산자 오버로딩 class Cents { int m_value; // private 로 선언된 클래스 멤버변수 public: Cents(const int& value) // 1. { m_value = value; } const int& getValue() const // 2. { return m_value; } void setValue(const int& value) { m_value = value; } /*int getValue() const { return m_value; }*/ }; int add(const Cents& c1,const Cents& c..

C++ unmanaged 2021.11.25

WHAT IS THE FRIEND?

doSomething 에서 각각의 a, b 객체의 멤버 변수에 접근을 시도하려고 하는데 에러뜬다. 왜? 클래스 내부에서 private 로 선언되어있기 때문. 해결방법 : 각각의 클래스에 doSomething의 이름에 friend를 붙인 놈을 넣는다. (의미 : void 함수 doSomething(A& a, B& b) => 이놈은 나의 친구다) 코드 실행순서 => doSomething(a, b) 실행 -> a.m_value 찾아가기 -> a.m_value가 있는 class A로 들어가기 -> 원칙상 private 로 선언되있는 m_value에 접근할수 없지만 doSomething이 친구라고 선언해놓음.(그니까 친구니까 특별하게 접근 허용을 해주는거임) -> ㅇㅋ 하고, friend void doSometh..

C++ unmanaged 2021.11.25

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'..

C unmanaged 2021.06.15

printf() 작동원리

저렇게 순차적으로 왼쪽부터 아래에 차례대로 스택에 저장되는데 float 의 경우엔 원래 4byte 이지만 printf 함수로 인해 double로 저장됨 고로 8byte를 할당받음.(왜그런진 모름) 고로 저렇게 8byte 8byte 4byte 이렇게 차례대로 저장되는데 만약에 변환지정자가 decimal 일경우 얘 같은경우 한번에 4byte만 읽어들이므로 위에 차례대로 4byte 4byte 4byte 이렇게만 읽고 나머지 데이터는 안읽음.. 고로 데이터가 막 뒤엉켜서 이상한 값이 나오게됨. 또, float double은 애초에 실수형인데 이걸 lld 같은 읽어들이는 데이터크기는 8byte로 똑같지만 원래 정수형한테만 쓰는걸 써버리면 역시나 마찬가지로 이상한 값이 나오게 된다. 고로 데이터를 출력할땐 그에 맞..

C unmanaged 2021.06.02

컴퓨터의 작동 원리

ROM BIOS - ROM 인걸로 보아 읽기만 가능하고 쓸수는 없다. BIOS의 약자가 Basic Input Output System 인걸로 보아 말그대로 기본 입출력을 위한 시스템이라고 볼 수 있을듯? CPU는 직접적으로 보조기억장치에 접근할 수 없음. 오로지 주기억장치(RAM)에만 상호작용함. 운영체제(OS)는 보조기억장치에 저장됨. 그렇다면 CPU는 어떻게 운영체제를 불러올 수 있는것인가? 보조기억장치에 저장된 운영체제에서 CPU가 읽어드릴 운영체제 정보를 RAM으로 복사해서 읽는방식임. 운영체제 뿐만아니라 그외 프로그램도 다 이런 똑같은 방식일걸로 보인다... 시스템 프로그램 - 컴퓨터 바탕화면을 바꿀때 사용하는 프로그램같은 운영체제의 핵심 프로그램이라고 하기에는 뭐한 그런 프로그램들???? 응용..

C unmanaged 2021.05.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.05.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.05.11

실수를 표현하기 위한 IEEE 754 방식의 부동소수점

데이터의 표현법이 또 있다고??? 앞서 다뤘던것중에서 빠진것이 하나 있다. 바로 "실수" 실수는 뭐 학창시절에 배웠던 것처럼 정수 사이에있는 무수히 많이 표현할 수 있는 수들이다. 정수 0과 1 사이에는 무수히 많은 실수들이 존재한다. 거의 무한대라고 볼 수 있음. 소숫점을 이용해 표현할 수도 있고 분수를 이용해 표현할 수도 있는데 소수점을 이용해 많이 표현하는 것 같다. 자릿수 표현역시 2^-1 2^-2 .... 등등으로 표현함. 그럼 소수점 역시 2진수로 표현하는 법을 알아야겠지? 보통 10진수에서 2진수로 표현할때 정수같은 경우는 나눗셈을 한 나머지를 이용해 구했는데 실수의 경우 2씩 곱해서 나온 정수부분을 이용해 구하는데 거의 메커니즘이 비슷하다고 볼수 있다. 오 아주 간편한 방법이잖아? 하지만 ..

이산수학 2021.04.06