可能重复:
How do promotion rules work when the signedness on either side of a binary operator differ?
从unsigned
整数转换为signed
整数时,我知道变量位的表示会发生变化。例如,从uint8
转换为int8
时,255可能会变为-1。但是,我从来不确定底层比特本身需要什么样的“演员”或“转换”。
我的问题是,整数变量的原始位模式是否保证在有符号和无符号类型之间static_cast
之后保持不变,或者它是否可能以某种方式由强制转换?
出于好奇,整数标牌类型之间的static_cast
是否会生成汇编,还是仅用于编译器知道要生成的asm指令?
编辑:
以下是我想了解的情景示例:
unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));
忽略双重演员会被优化掉的事实,这个例子是否会被保证永远保持真实?