오늘 : php5.3/Zend/Zend.h
, 라인 코드를 거기 나를 혼란합니다.이다 그것은 "/ * 과부하 요소 데이터 유형 */#DEFINE OE_IS_ARRAY (1 << 0) #DEFINE OE_IS_OBJECT t (1 << 1) #DEFINE OE_IS_METHOD t (1 << 2)"에 무엇을 의미 하는가? 내가 디렉토리에 PHP는 커널 코드, 읽을 때
/* overloaded elements data types */
#define OE_IS_ARRAY (1<<0)
#define OE_IS_OBJECT (1<<1)
#define OE_IS_METHOD (1<<2)
는이 같은 의미인가 :
코드에 따라인가? 그리고 4 바이트를 가진 int 형을 사용합니다. 왼쪽 시프트 연산을 보여줍니다.
0000 0000 0000 0000 0000 0000 0000 0000 = 0
After 1 <<
0000 0000 0000 0000 0000 0000 0000 0000 = 0
___________________________________________
0000 0000 0000 0000 0000 0000 0000 0001 = 1
After 1<<
0000 0000 0000 0000 0000 0000 0000 0010 = 2
___________________________________________
0000 0000 0000 0000 0000 0000 0000 0010 = 1
After 1<<
0000 0000 0000 0000 0000 0000 0000 0100 = 4
그러나 그녀가/그는 이것이 왜 그냥 직접 CONST 변수를 할당 할 싶어?
/* overloaded elements data types */
#define OE_IS_ARRAY (0)//turn the 1<<0 directly
#define OE_IS_OBJECT (2)//turn the 1<<1 directly
#define OE_IS_METHOD (4)//turn the 1<<2 directly
내가 도와 주시면 감사하겠습니다. :)
그것은 비트 마스크는 것을 시각화하는 단지입니다. – Hyperboreus
비트 테이블을 수정하기 위해 방금 편집했습니다. 보세요. 1 << 0은 0이 아닌 1입니다. 0 비트로 임의의 값을 이동하면 혼자 남습니다. 또한 이러한 시프트 양은 비트 수 (어쨌든 낮은 비트 수의 기계에서)이기 때문에 외부 문서와 상수를 일치시킬 수도 있습니다. 이것은 하드웨어 및 비트의 포트 정의 비트 정의에 따라 더 많이 발생합니다. 미안 해요 –
@MikeHousky, 난 당신이 더 명확하게 코드 예제와 그것을, 감사 : 매우 귀하의 상세 답변 – BeCurious