3

システムに8バイトのunsigned long long変数があり、次のことをしようとしています:

unsigned long long ull;
ull = timeLow;
ull |= timeHigh << 32;

これを行うと、次の警告が表示されます:左シフトカウント>=タイプの幅。また、 timeHigh がシフトインしたことを考慮していないようです。これを修正するにはどうすればよいですか?

4

3 に答える 3

10

ullシフトしているのではなくtimeHigh、シフトしていて、そのシフトの結果を に保存していますull

timeHigh32 ビット シフトの結果を格納するのに十分な大きさではないと思います。, (編集)を作成timeHighするか、代わりに単に割り当ててから 、それをシフトしてから'ing in にします。(クレジット @JasonD)unsigned long longtimeHighullortimeLow

于 2012-12-18T16:46:39.283 に答える
0

timeHigh は 32 ビット型のようです。32 ビット左シフトすると、すべてゼロになります。シフトするずっと前に timeHigh を型に変換する必要があります。

unsigned long long ull;
ull = timeHigh;
ull = ull << 32;
ull |= timeLow;
于 2012-12-18T16:49:41.743 に答える
0

これはあなたが意味したものですか?

unsigned long long timeLow = /* value */;
unsigned long long timeHigh = /* value */;
unsigned long long ull;
ull = (timeHigh << 32 | timeLow)
于 2012-12-18T16:50:29.293 に答える