Ann*_*inn 2 c++ integer bit-manipulation
可能重复:
当二元运算符两边的签名不同时,促销规则如何工作?
当从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)));
Run Code Online (Sandbox Code Playgroud)
忽略双重演员将被优化掉的事实,这个例子是否会被保证永远保持真实?