반응형

 

메서드는 함수에 포함되어 있는 계념이다.

class A
{
	void M(){std::cout << "메소드";}
};

void F(){std::cout << "함수";}

class 안에 있는걸 메소드 라고 칭해

 

다른거 라고 하면 함수는 독립적이고

메소드는 class 에 종속적인것 정도야

'언어' 카테고리의 다른 글

증감연산자  (0) 2021.05.31
오버로딩과 오버라이딩  (0) 2021.05.15
반응형

오늘 알아볼 것은 bit 연산이야!

 

bit 연산이 뭘까?

 

 

 

 

 

 8bit = 1byte 인건 알고있지? 

그러면 int 는 4byte = 32bit 같은거야

 

bit 란 데이터를 나타내는 제일 작은 단위야 0과 1로 구성되어 있지 

0과1을 on/off 로 표현한걸 flag🏁 라고도 말해

이걸 사용하면 공간을 좀더 효율적으로 사용하는게 가능해

 

🏁flag 이건 상태를 저장할때 쓰여!

우리가 8가지 상태를 저장할때  bool 을 8번 선언 해서 사용할수도 있을텐데

bit flag 를 사용하면 char 을 하나만 사용해도 8가지 상태를 저장할수 있다는거야

1byte 만 사용해서 8가지 상태 저장을 할수있는거지

 

 

그래서 어떻게 쓰는건데?

 

 

 

 

&   비트 AND 연산  비교되는 인자가 둘다 참일때 참
|   비트 OR 연산  비교되는 인자가 하나라도 참이면 참
^   비트 XOR 연산  비교되는 인자가 서로 다르면 참
~   비트 NOT 연산  인자의 값을 반전시킨다
<< 비트 쉬프트 연산 비트값을 왼쪽으로 지정한 횟수만큼 이동한다.
>> '' 비트값을 오른쪽으로 지정한 횟수만큼 이동한다.

이 표를 보면 if 문의 and , or 문에서 본적있는거 같지?

unsigned char Flag1 = 5; //0000 0101
unsigned char Flag2 = 3; //0000 0011

printf("%d",Flag1 & Flag2); //0000 0001
printf("%d",Flag1 | Flag2); //0000 0111
printf("%d",Flag1 ^ Flag2); //0000 0110
printf("%d",~Flag1); // 1111 1010
printf("%d",Flag1 << 1); // 0000 1010
printf("%d",Flag1 >> 2); // 0000 0001

unsigned char (범위 = 0~255)

이처럼 사용된다 게임에서는 플레이어의 상태 같은걸 만든다고 생각하면 편하다.

 

 

 

'언어 > C++' 카테고리의 다른 글

c++ std::function 사용하기  (0) 2023.01.10
함수 포인터! (Function Pointer)!  (0) 2021.07.13
인라인 함수(Inline Function)  (0) 2021.06.15
네임스페이스  (9) 2021.05.18
call by reference/call by value/call by address  (0) 2021.05.03
반응형

 

call by referncecall by value 그리고 call by address

이것들은 무엇인가?

 데이터 전달 하는방식 이라고 생각하자.

 

언어들마다 기본적으로 사용하는 방식이 조금 다를수 있으니 조심하자.

 

 

call by value  

        값에 의한 호출

   

 

int plus(int _a){  _a++; }

값을 복사 생성하여 내부에 새로운 값의 _a를 생성하여 사용하는 방법

그럼으로 아래의 코드  return으로 값을 돌려주어 데이터를 다시 넘겨주는 경우가 많음

int plus(int _a){ return _a++; }

 

잘못하여 사용할경우 큰데이터값을 복사 생성하여 속도가 느려지며 크기가 커질수 있다.

 

 

---------------------------------------------------------------------------------

call by address 

         주소에 의한 호출

 

 

void swap_address(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}

이처럼 함수 안에서 포인터를 이용하여 주소값을 전달하여 사용한다.

값의 위치를 전달하기에 속도가 call by value(복사생성) 보다 빠르다.

수정했을경우 데이터가 바로 바뀔수 있기에 편리하지만 데이터를 직접 변경하기 때문에 위험할수 있다.

 

---------------------------------------------------------------------------------

call by reference

         참조에 의한 호출

 

 

call by reference는 c에서는 지원을 하지않는 방식이다. Address방식괴 매우 유사하다.

메모리 구조에 대해서 이해가 있으면 좋다

 

메모리 공간에 이름을 붙여서 공유하여 사용 한다.

void swap_reference(int &a,int &b){ 
int temp = a;
a = b; 
b = temp;
}

또는

int a =10;
int &ref = a;
ref = 20; //a=20;

처럼 사용할수있다

-------------------------------

정리

 

reference address 방식은 값 전체를 복사하지 않기 때문에 속도가 빠르고 메모리를 덜 사용한다.

 또한 장단점으로는 원래 값이 영향을 받기 때문에 편하지만 조심해야한다.

둘은 포인터 형식으로 전달 받는가 아닌가의 차이다. 

 

 

 

 

value는 복사하여 사용하기 때문에 값이 보존되어 안전하지만

데이터의 크기가 커지면 속도가 느려지고 데이터를 많이 사용한다.

 

예외로는 Python은 call by assignment라는 방식을 사용한다.

 

 

'언어 > C++' 카테고리의 다른 글

c++ std::function 사용하기  (0) 2023.01.10
함수 포인터! (Function Pointer)!  (0) 2021.07.13
인라인 함수(Inline Function)  (0) 2021.06.15
네임스페이스  (9) 2021.05.18
bit연산! 또는 bit Flag  (0) 2021.05.05

+ Recent posts