ビット演算子は私の得意分野ではありません。ビットシフトを使用するときに明示的なキャストがいつ必要なのか疑問に思っています。
たとえば、 が符号なし整数型 ( など) である場合は常に true であることが保証されi&1 == i%2
ていますか? 問題は、 inが暗黙的に width 型にキャストされているかどうかだと思います。i
char
unsigned
uint64_t
1
i&1
sizeof(i)
2 番目の例として、a を実行する場合、最初に、シフトされた結果を格納するのに十分な幅のデータ型にi = 1<<myshift
明示的にキャストする必要がありますか?1
i = (uint64_t)1<<myshift
myshift
署名されていない限り、2 番目の例の型は無関係ですか?
これらに対する答えは、イエス、イエス、そしてイエスだと思います。特に 2 番目の例はすぐに確認できます。しかし、誰かがこのことについての良い参照を持っていますか? C標準へのリンク/引用は非常に役立ちます。