iPhone 샘플 프로젝트 (Xcode IDE, Apple LLVM 컴파일러 4.2)의 코드를 읽었습니다.C 언어의 열거 형 선언에서 0x80000000이라는 16 진수 표현의 의미
typedef enum _Application_Events
{
EVENT_EXIT = 0x80000000,
EVENT_TOUCH,
EVENT_DRAG,
EVENT_RELEASE_TOUCH,
EVENT_ROTATE_0,
EVENT_ROTATE_90,
EVENT_ROTATE_180,
EVENT_ROTATE_270
} Application_Events;
나는 이러한 이벤트에 할당되는 값의 종류를 이해하지 않는다 : 그 아이폰 샘플 프로젝트 (C로 작성) 외부 라이브러리의 헤더 파일에서 일부 이벤트는 열거 형 선언 거기 . 0x80000000
은 큰 양의 정수 (2147483648
) 또는 음수의 0 또는 음의 정수 (-2147483648
)로되어 있습니까?
EVENT_EXIT
는
(int) -2147483648
동일하고
EVENT_RELEASE_TOUCH
등등
(int) -2147483645
과 같습니다.
외관상으로는 two's complement 표현으로 처리됩니다. 관련 게시물은 here입니다.
하지만 이들은 지금은 확실하지 않다 무엇을 :
(1) 0x80000000
에 대한 기본 데이터 유형은 항상 int
또는 다른 상황에서 뭔가 다른 것을? 이것은 컴파일러 나 플랫폼에 달려 있습니까?
(2) 16 진수 값을 이와 같이 부호있는 정수로 지정한 경우 항상 2의 보수 표현으로 해석됩니까? 이것은 컴파일러 나 플랫폼에 달려 있습니까? 관련 게시물은 here입니다. 또 다른 참고 자료는 here입니다.
몇 가지 아이디어를 알려주십시오. 모두 감사합니다. D
다음 질문에 답하려면 : (1) C 플랫폼을 참조하는 다른 답변에 따라 플랫폼에 따라 다릅니다. 그러나 일반적으로 int입니다. (2) 캐스팅 또는 접미어로 형식을 지정하지 않으면 컴파일러에서 숫자가 부호있는 int라고 가정합니다. 16 진수 값은 그 자체로 양수도 아니고 음수도 아니므로 비트 패턴이므로 상위 비트가 설정되면 값은 음수로 간주되므로 서명 된 유형에 할당하면 음수가되지만 할당하면 그것은 부호없는 타입으로 여러분이 기대하는 자연스러운 가치를 가질 것입니다. – PaulProgrammer