未签名到签名转换,在位级别会发生什么?

Ann*_*inn 2 c++ integer bit-manipulation

可能重复:
当二元运算符两边的签名不同时,促销规则如何工作?

当从unsigned整数转换为signed整数时,我知道变量位的表示会发生变化.例如,255可以从转换时成为-1,uint8int8.但是,我从来不确定底层位本身的"强制转换"或"转换"是什么.

我的问题是,整数变量的原始位模式是否保证在有static_cast符号和无符号类型之间保持不变,或者它是否可能以某种方式由强制转换?

出于好奇,static_cast整数标牌类型之间是否生成汇编,或者仅用于编译器知道生成的asm指令是什么?

编辑:

以下是我想要了解的场景示例:

unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));
Run Code Online (Sandbox Code Playgroud)

忽略双重演员将被优化掉的事实,这个例子是否会被保证永远保持真实?

Gra*_*and 7

位模式根本不会改变(在实践中您可能遇到的大多数架构).不同之处在于编译器生成的用于操作值的指令.