システムに8バイトのunsigned long long
変数があり、次のことをしようとしています:
unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;
これを行うと、次の警告が表示されます:左シフトカウント>=タイプの幅。また、 timeHigh がシフトインしたことを考慮していないようです。これを修正するにはどうすればよいですか?
ull
シフトしているのではなくtimeHigh
、シフトしていて、そのシフトの結果を に保存していますull
。
timeHigh
32 ビット シフトの結果を格納するのに十分な大きさではないと思います。, (編集)を作成timeHigh
するか、代わりに単に割り当ててから 、それをシフトしてから'ing in にします。(クレジット @JasonD)unsigned long long
timeHigh
ull
or
timeLow
timeHigh は 32 ビット型のようです。32 ビット左シフトすると、すべてゼロになります。シフトするずっと前に timeHigh を型に変換する必要があります。
unsigned long long ull;
ull = timeHigh;
ull = ull << 32;
ull |= timeLow;
これはあなたが意味したものですか?
unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)