부호없는 형식립니다, 내가 한 일은이다 :대형 정수 암시 내가 비트 필드에서 가능한 최대 값을 결정하려고했다
using namespace std;
struct A{
unsigned int a:1;
unsigned int b:3;
};
int main()
{
A aa;
aa.b = ~0U;
return 0;
}
MSVC 잘하지만 GCC 4.9.2 나에게 경고를 주었다
warning: large integer implicitly truncated to unsigned type [-Woverflow]
내가 어떻게 제거 할 수 있는지 궁금합니다. (필드의 비트 폭을 알지 못한다고 가정하고, 가능한 최대 값을 알고 싶습니다.) 자신의 범위를 포함하는 비트 필드의 가치 표현의 측면, 현재 결함 C++에서 표준으로 간주되는 언어 표준에 underspecified 것을
aa.b = 1;
aa.b = -aa.b;
참고를 다음과 같이
비트 필드는 휴대하지 않습니다. –
@Neil Butterworth : 그들은 근본적인 유형의 표현을 다루는 C++ 언어 부분의 거의 모든 것만 큼 이식성이 떨어집니다. – AnT
@An 아니요, 이식성이 훨씬 떨어집니다. –