임베디드에서 진법연산과 비트연산은 기본중의 기본이다.


코드를 해석하다보면 특히 비트연산이 자주 등장하는데, 이를 이해하고 사용하기 위해서는 16진법에 대해서 알아야 한다.


예를 들어, 이진수 00110011을 16진수로 표현한다면


4개의 비트씩 묶어서 16진수로 표현된다.

        


            0 0 1 1      0 0 1 1 

         0X   3              3        = 33의 의미는 이진수를 16진법으로 표현한 숫자일뿐이며, 이를 해석할때 이진수로 변환하고

                                           MSB & LSB의 순으로 써내려가면 8비트의 원래 이진수값을 알수가 있다.



즉 정리하자면,


10진수 32+16+2+1 = 51은 이진수로 00110011 이며, 이를 16진수로 표현하면 0x33이 된다.



C 언어에서는 16진수를 표시하기 위해서는 숫자 앞에 0x 를 붙인다.



'Engineering > C Language' 카테고리의 다른 글

[C언어] 전처리기의 개념  (0) 2014.03.04
[C++] 구조체와 클래스  (0) 2014.02.24
[C언어] 메모리구조와 동적할당  (0) 2014.02.21
[본문스크랩] enum의 사용법  (1) 2014.01.28
[C언어] 구조체사용하기  (0) 2014.01.16

구조체는 연관있는 데이터를 하나의 그룹으로 믂기위해서 등장하였다.


C++에서도 구조체를 선언할수있다.


struct Smartphone Samsung;

struct Smartphone Apple;


이와 같이 선언이 가능하다. struct 키워드는 typefed를 통해서 축약이 가능하다.

예를들자면,


#include <iostream>


#define  LEN  30


using namespace std;



struct Smartphone 

{

char phonename[LEN]; //핸드폰 이름

int version;

int price; 

}


void showphone(const Smartphone  &phone)

{

cout<<"핸드폰명:"<<phone.phonename<<endl;

cout<<"버전명:"<<phone.version<<endl;

cout<<"현재가격:"<<phone.price<<"dollar"<<endl<<endl<<;


}


int main(void)

{

Smartphone apple={"apple, 2, 800}

showphone(apple);


}


매우 간략한 예제이지만, 구조체의 사용법과 간단히 함수의 동작에 대해서 이해가 가능할것으로 보인다.

여기서 하나의 의문을 가질수가 있다.

만약 구조체안에다가 함수를 삽입하면 어떻게 될까??





#include <iostream>


#define  LEN  30


using namespace std;



struct Smartphone 

{

char phonename[LEN]; //핸드폰 이름

int version;

int price; 


void showphone() //매개변수는 불필요 해졌다.

{

cout<<"핸드폰명:"<<phonename<<endl; //연산의 대상에 대해서 정보가 불필요해졌다.

cout<<"버전명:"<<version<<endl;      //변수에 대한 직접접근이 가능하기 떄문이다.

cout<<"현재가격:"<<price<<"dollar"<<endl<<endl<<;


}


}


int main(void)

{

Smartphone apple={"apple", 2, 800}

apple.showphone(apple);

return 0;

}



이로써 구조체는 대충 이해가 되었다. 그렇다면, 클래스와 구조체의 차이점은 무엇일까??


> 선언법과 초기화법이 다르다.

> 클래스의 변수와 함수에 대한 접근법이 다르다.  (접근제어 지시자의 사용)





* 접근제어 지시자


C++에서 접근제어 지시자는 아래와같이 3가지의 형태가 존재한다.


1) public : 어디서든 접근허용

2) protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용

3) private : 클래스 내 (클래스 내에 정의된 함수)에서만 접근허용


먼저 1)과 3)번에 관해서 아래의 예를 통하여 이해해 보자.


#include <iostream>



#define  LEN  30


using namespace std;



class Smartphone 

{


private:

char phonename[LEN]; //핸드폰 이름

int version;

int price; 

public:

void initphone(char *ID, int v, int p);

void showphone();

}


void Smartphone::initphone(char *NAME, int v, int p)

{

strcpy(phonename, NAME);  //phonename공간에 NAME의 내용을 복사한다.

version = v;

price = p;

}


void Smartphone::showphone() //매개변수는 불필요 해졌다.

{

cout<<"핸드폰명:"<<phonename<<endl; //연산의 대상에 대해서 정보가 불필요해졌다.

cout<<"버전명:"<<version<<endl;      //변수에 대한 직접접근이 가능하기 떄문이다.

cout<<"현재가격:"<<price<<"dollar"<<endl<<endl<<;


}



int main(void)

{

Smartphone apple;

apple.initphone("apple", 2, 800);

apple.showphone(apple);

return 0;

}


private 과 public의 쓰임을 이해하기 위해서 위의 예제를 먼저 따라가보자.

Smartphone 이라는 클래스가 선언되었고, 클래스는 private 과 public으로 구분된다.

public은 어디서든 접근이 가능하며, private 는 해당하는 범위 내에서만 접근이 가능하다.


따라서 위의 예제에서는 private 으로 접근을 하기 위해서 같은 클래스내에 public으로 선언된 initphone 함수를 통해서

초기화를 수행한다. 왜냐하면 private으로 변수나 함수가 선언되면 main함수에서 직접적으로 접근이 불가능하기 떄문이다. 

따라서 public으로 선언된 함수를 통하여 같은 클래스내의 private으로 접근하여 초기화를 수행한다. 


구조체의 경우는 Private이 없다. 기본적으로 구조체는 모든 변수와 함수는 public으로 선언되었다고 생각하면 된다.

만약 클래스에서 접근제어 지시자를 쓰지 않으면 구조체와는 반대로 모두 private으로 선언되었다고 봐야한다.


[용어의 정리]


위에서 말한 변수는 "객체"라고 표현된다.

클래스를 구성하는 변수는 "멤버변수"라고 부르며,

클래스를 구성하는 함수는 "멤버함수"라고 부란다.


그리고 C++에서는 H(헤더파일), CPP(정의파일) 로 코드들이 구분되어 다루어진다.


예를들어, 

Smartphone.h    : 클래스의 선언을 담는다

Smartphone.cpp : 클래스의 정의(멤버함수의 정의)를 담든다.


따라서, 위의 예제를 파일로 나눠본다면 아래와 같이 된다.


[Smartphone.h]


#ifndef __SMARTPHONE.H__

#define __SMARTPHONE.H__


#define  LEN  30


class Smartphone 

{


private:

char phonename[LEN]; //핸드폰 이름

int version;

int price; 

public:

void initphone(char *ID, int v, int p);

void showphone();

}



[Smartphone.cpp]


#include <iostream>

#include "Smartphone.h"


using namespace std;

void Smartphone::initphone(char *NAME, int v, int p)

{

strcpy(phonename, NAME);  //phonename공간에 NAME의 내용을 복사한다.

version = v;

price = p;

}


void Smartphone::showphone() //매개변수는 불필요 해졌다.

{

cout<<"핸드폰명:"<<phonename<<endl; //연산의 대상에 대해서 정보가 불필요해졌다.

cout<<"버전명:"<<version<<endl;      //변수에 대한 직접접근이 가능하기 떄문이다.

cout<<"현재가격:"<<price<<"dollar"<<endl<<endl<<;


}



[applephoneMain.cpp]


#include "Smartphone.h"


int main(void)

{

Smartphone apple;

apple.initphone("apple", 2, 800);

apple.showphone(apple);

return 0;

}














when it comes to

~에 관한 한



on the one hand

한편으로는


cope with

 

…에 대처[대응]하다; …에 대항하다. 



in[to] excess


~ 극단적으로



get through 


+to 어디 : ~에 진출하다.  

(~에게) 가 닿다[전달되다]


+ Something : ~을 많이 써버리다.


+ to Someone : ~누그를 이해, 납득시키다



give rise to something


(격식) ~이 생기게 하다

The novel's success gave rise to a number of sequels.

그 소설의 성공으로 몇 권의 속편이 나왔다.



belong to somebody


~ 소유[것]이다, ~에 속하다

Who does this watch belong to?

이 시계 누구 거죠?

The islands belong to Spain.

그 섬들은 스페인에 속한다.


~ 차지[세상]이다

British actors did well at the award ceremonybut the evening belonged to the Americans.예문 발음듣기

시상식에서는 영국 배우들이 잘 했지만 그날 저녁은 미국 배우들 세상이었다.




by means of something



(격식) ~의 도움으로[~을 써서]

The load was lifted by means of a crane.

그 짐은 기중기를 써서 들어올렸다.



the fact (of the matter) is (that)…



(특히 방금 언급된 내용과 반대됨을 강조하여) 사실은 …이다

A new car would be wonderful but the fact of the matter is that we can't afford one

새 차라면 멋지겠지. 하지만 사실은 우리가 그럴 형편이 안 돼.



point out (to somebody)


(주의를 기울이도록 ~을) 지적[언급]하다 동의어 point something out (to somebody)

She tried in vain to point out to him the unfairness of his actions.

그녀는 그에게 그의 행동의 부당함을 지적하려 했으나 허사였다.

He pointed out the dangers of driving alone.

그는 혼자 운전하는 것의 위험을 지적했다.

[+ that]I should point out that not one of these paintings is original.

이 그림들 중 어느 것도 원본이 아니라는 것을 제가 언급해야겠군요.


ana·logy

 


명사(pl. -ies)

1.[C] ~ (between A and B) | ~ (with sth) 비유; 유사점

The teacher drew an analogy between the human heart and a pump.예문 발음듣기

선생님은 인간의 심장을 펌프에 비유했다.

There are no analogies with any previous legal cases.예문 발음듣기

이전에 있은 어떤 법률 소송과도 유사점이 없다.



+ Recent posts