그것은 곧장 앞으로 꽤입니다; 시프트 연산의 결과 유형은 LHS 피연산자의 유형입니다. 대부분의 2 진 연산자의 경우 결과는 LHS 및 RHS 피연산자를 기반으로하지만 시프트 연산자는 다릅니다.
unsigned char uc = 0x08;
unsigned short us = 0x0008;
unsigned int ui = 0x00000008;
unsigned long long ul = 0x0000000000000008;
는 (. 나는 세부 사항이 다른 경우 변경해야 할이 대답을
sizeof(unsigned int) == 4
있으리라 믿고있어,하지만 개념은 변경되지 않습니다.)
지금 어떤 표정을 고려 :
uc + uc;
을 두 유형 모두 int
으로 변환되고 결과는 int
입니다.
us + us;
다시 두 종류 int
로 변환하고 결과 int
이다.
us + ui;
ui + us;
us
의 값이 unsigned int
로 변환되고 결과 unsigned int
(이전 값 일명 int
signed int
변환 된 참고)이다. 이러한 식의
ui + ul;
ul + ui;
모두는 unsigned long long
에 ui
을 변환하고 결과는 unsigned long long
입니다. 이 표현식은 대칭 적입니다. 결과 유형 (실제로는 +
연산자의 결과 값)은 LHS에있는 값과 연산자의 RHS에있는 값에 의존하지 않습니다.
정상적인 작동에는 많은 부분이 있습니다. 지금 교대는 어떨까요?
uc << uc;
좌변은 일반적인 산술 변환하여 int
로 변환되고 그 결과는 int
이다.
us << us;
이 결과는 int
입니다.
ui << ui;
이 결과는 unsigned int
입니다.
ul << ul;
이 결과는 unsigned long long
입니다. 그러나 유형을 혼합하는 것은 어떨까요?
uc << ul; // Result: int
ul << uc; // Result: unsigned long long
us << ui; // Result: int
ui << us; // Result: unsigned int
ui << ul; // Result: unsigned int
ul << ui; // Result: unsigned long long
LHS 피연산자의 수준을 올린 형식이 결과 유형을 제어합니다. int
보다 짧은 유형의 경우 결과는 int
입니다. 다른 유형의 경우 유형은 LHS 피연산자의 유형입니다.
그게 모두 귀하의 견적 의미입니다.
답변과 시간 내 주셔서 감사합니다. 나는 나의 질문에 대한 어떤 대답도 포기하고 이와 같은 좋은 것을 기대하지 않았다. – Thokchom