비트 이동 연산자의 부호 유지 정책 비트 이동 연산자의 부호 유지 정책 오른쪽 쉬프트 연산을 하더라도 부호 비트는 항상 유지하는 정책이다. 부호가 음수일 경우 비트단위에서 비 직관적인 동작으로 보일 수 있기 때문에 인지하고 있을 필요가 있다. 예를 들어, 8비트 [0100 0000]을 오른쪽으로 한번 쉬프트 연산을 할 경우 [0010 0000] 이 되지만, [1000 0000]의 경우 오른쪽으로 쉬프트 연산을 할 경우 [0100 0000]이 아니라 [1100 0000]이 된다. 이런 정책을 사용하는 이유는 오른쪽 쉬프트 연산은 '나누기 2'의 결과 동일하도록 하기 위함이다. 정수로 표현하면 [1000 0000] (-128)에 오른쪽 쉬프트를 적용할 경우 [1100 0000] (-64)가 된다. 예제는 다음과 같다. #include #inc.. Computer Science/C++ 2년 전
Inheritance 의 이해 - ⑥ Object Slicing Inheritance의 이해 - ⑥ Object Slicing C++의 상속관계에서 Object slicing은 의도하지 않았던 결과를 일으킬 수 있기 때문에 알아두는 것이 필요하다. 아래의 코드를 살펴보자. class Animal { public: virtual void Speak() { std::cout Computer Science/C++ 3년 전
Inheritance 의 이해 - ⑤ Virtual Inheritance Inheritance 의 이해 - ⑤ Virtual Inheritance 앞서 다중 상속 글에서 아래와 같이 다이아몬드 상속이 이루어질 경우 조상 클래스인 animal 클래스가 두번 생성된다고 설명했다. 이 문제는 가상 상속(Virtaual Inheritance)으로 해결할 수 있다. 이번 글에서는 가상 상속이 메모리 레벨에서 어떻게 동작하는지 살펴본다. 먼저 가상 상속을 사용하는 방법은 다음과 같다. class Animal { public: virtual void Speak() { std::cout Computer Science/C++ 3년 전
Inheritance 의 이해 - ④ Multiple Inheritance Multiple Inheritance 지금 까지는 한 부모로부터만 상속받는 단일 상속을 알아보았다. 하지만 다음과 같은 상황을 생각해볼 수 있다. 위 그림처럼 Lion 클래스와 Tiger 클래스 모두에게서 상속받아서 Liger 클래스를 만들 수 있다. 이때 발생할 수 있는 몇 가지 특징을 살펴보자. class Lion { public: virtual ~Lion() = default; private: double LionData; }; class Tiger { public: virtual ~Tiger() = default; private: double TigerData; }; class Liger : public Lion, public Tiger { public: private: double LigerDa.. Computer Science/C++ 3년 전