2016-06-14 3 views
-3

나는 C++에서 SDL 프로그램을 작성하는 방법을 학습하고, 나는이 코드를 건너 온 :'|' on 함수 매개 변수는?

SDL_Renderer *ren = 
    SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); 
//              ^I have no idea what this means? 

나는 t이 특정 C++ 기능이 있는지 알고 돈?

내 생각 엔 쉘 스크립팅 배경에서 오는 것은 그것이 파이프 일 수도 있다는 것을 의미한다. (분명히 그 사실을 알지 못한다.) 또는 bitwise OR (idk라면 그것도 그렇다) 일 것이다.

위의 코드와 같은 함수 매개 변수에서 |을 사용하면 무엇을 의미합니까?

+3

[비트 논리 연산자] (http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_logic_operators)를 참조하십시오. – songyuanyao

+0

연산자가 비트 단위 OR'ing입니다. '01 | 10 = 11' – Arunmu

+1

매우 유용한 googlestring : "C++ 연산자". 책이있는 경우 운영자는 색인에 있습니다. (당신은 그들 중 더 많이보고 싶을 것입니다.) 책이 없다면 [여기]를보십시오 (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide - 및 - 목록). – molbdnilo

답변

3

다음은 설정할 수있는 플래그입니다. 이 경우 |은 비트 연산자를 나타냅니다.

예제에서이 기능을 사용하면 단일 매개 변수를 통해 여러 플래그를 결합 할 수 있습니다.

는 두 플래그는 다음과 같은 값을 가정 :

SDL_RENDERER_SOFTWARE = 1 // Binary 0001 
SDL_RENDERER_ACCELERATED = 2 // Binary 0010 
SDL_RENDERER_PRESENTVSYNC = 4 // Binary 0100 

로직 비트 또는 두 가지의에서, flag 값 6 당신을 떠날 것이다. 우리는 쉽게 플래그 비트 및 플래그는, 두 힘이 될 모든 플래그 조합이 고유 한 값에서 결과를 확인하는 것이 여기에 중요하다는 것을 :

flag = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC // flag = 6 (0110) 
flag & SDL_RENDERER_SOFTWARE == 0 // Not set 
flag & SDL_RENDERER_ACCELERATED == 2 // Set 
flag & SDL_RENDERER_PRESENTVSYNC == 4 // Set 

주를 사용하여 설정 한이 값에서 확인할 수 있습니다.

+0

그래서 기본적으로 CreateRenderer에 SDL_RENDERER_ACCELERATED 및 SDL_RENDERER_PRESENTVSYNC 옵션을 모두 전달한다는 의미입니다. – hoholee12

+0

@ hoholee12 정답. –

+0

오늘 감사합니다. : D – hoholee12

0

bitwise OR operator이며,이 경우에는 SDL_CreateRenderer 함수에 플래그 집합을 전달하는 데 사용됩니다.

플래그의 집합 상상 :

const int FLAG1 = 0x1 << 0; // 0b00...0001 
const int FLAG2 = 0x1 << 1; // 0b00...0010 
const int FLAG3 = 0x1 << 2; // 0b00...0100 
/* ... */ 

당신이이 플래그의 이진 표현에서 볼 수 있듯이, 그들은 하나의 비트가 1로 설정해야하고,이 비트는 것을 의미, 각 플래그 다르다을 ... ... | 연산자를 사용

int flag_a = FLAG1 | FLAG2; // 0b00...0011 
int flag_b = FLAG1 | FLAG3; // 0b00...0101 

그들을 결합 할 수 있습니다 여전히 비트 AND (&) 연산자를 사용하여 원래 플래그를 검색 할 수있는 동안 :

,536,913,632를 10
int is_flag1_set = flag_a & FLAG1; // 0b00...0001 != 0 
int is_flag2_set = flag_a & FLAG2; // 0b00...0010 != 0 
int is_flag3_set = flag_a & FLAG3; // 0b00...0000 == 0 
관련 문제