unsigned
整数から整数にキャストするときsigned
、変数のビットの表現が変化することを私は知っています。たとえば、からに変換すると、255は-1になる場合がありuint8
ますint8
。ただし、基になるビット自体に「キャスト」または「変換」が何を伴うのかはわかりませんでした。
私の質問は、整数変数の生のビットパターンは、static_cast
符号付き型と符号なし型の間で同じままであることが保証されているのでしょうか、それとも何らかの方法でキャストによって変換される可能性があるのでしょうか。
好奇心からも、static_cast
整数サイネージタイプ間でアセンブリが生成されますか、それともコンパイラが生成するasm命令を認識できるようにするためだけに使用されますか?
編集:
これが私が知りたいと思う種類のシナリオの例です:
unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));
ダブルキャストが最適化されるという事実を無視すると、この例は常に当てはまることが保証されますか?