다음과 같이 작성했으며 16
이 인쇄 될 것으로 예상했습니다. 열거 형의 비트 필드와 값이 저장 됨
#include <iostream>
enum E : long { e = 16 };
struct X
{
E e : 5;
};
X x;
int main(){ x.e = E::e; std::cout << static_cast<int>(x.e) << std::endl; }
는하지만 아니었다. 컴파일러에 경고가 표시되고 대신
-16
이 인쇄되었습니다. 경고 :
내게 불분명합니다. 왜 경고가 표시되었고 -16
이 인쇄 되었습니까? 나는 5
크기의 비트 필드를 선언하여 거기에 16
을 저장할 수 있다고 선언했습니다.
형식이 서명 된 경우 5 비트로 충분하지 않습니다. 열거 형의 기본 유형을 'unsigned'로 변경하면 코드가 작동합니다. – Praetorian
당신이'unsigned long'을 원한다고 생각합니다 ... http://coliru.stacked-crooked.com/a/6a1576333fd7ec55 –