コードは次のとおりです。私はそれをVS、clang ++、G ++でテストしました。それらのすべては、1 << 32
と1 << i
(iは32)が異なることを示しています。私は組み立てを見た。コンパイル時にコンパイラが1 << 32
の結果を計算するようです。この不一致はバグでなければならないと思うし、それはC++のもう一つの未定義の動作だと思う。`1 << 32`と` int i = 32;なぜですか? 1 << i`は別の結果を表示しますか?バグか機能ですか?
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << (1 << 32) << std::endl;
int i = 32;
std::cout << (1 << i) << std::endl;
return 0;
}
結果:
clang++:
1 << 32:73832
1 << i:1
g++:
1 << 32:73832
1 << i:1
違う結果を示していますが、これらの結果は表示されません。 – ForceBru
[警告](http://coliru.stacked-crooked.com/a/277b5da2e9464284)を確認してください。 –
@πάνταῥεῖ私は警告を受けた。私はちょうど '(1 << i)が(1 << 32)と異なる理由を知りたいだけです。私は彼らが同じであるべきだと思います。 – Yyao