可能是重复问题:
当二进制运算符两边的有符号性不同时,促销规则如何工作?
当从无符号整数转换为有符号整数时,我知道变量的位表示会发生变化。例如,将255从uint8
转换为int8
时,它可能会变成-1。但是,我从来没有确定“转换”或“强制类型转换”对底层位本身意味着什么。
我的问题是,在有符号和无符号类型之间进行static_cast
后,整数变量的原始位模式是否保证保持不变,或者是否可能被转换方式改变?
出于好奇,整数符号类型之间的static_cast
是否会生成汇编代码,还是仅用于让编译器知道要生成哪些汇编指令?
编辑:
这里是我想了解的一种情况的示例:
unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));
忽略双重转换会被优化的事实,这个例子是否保证始终成立?