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

时间:2013-01-21 22:14:10

标签: c++ integer bit-manipulation

  

可能重复:
  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)));

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

0 个答案:

没有答案