unsigned型に切り捨て、私がやったことです:大きな整数が暗黙のうちに、私はビットフィールドで可能な最大値を決定しようとしていた
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いいえ、携帯性はあまりありません。 –