可能重复: 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)));忽略了双重转换会被优化的事实,这个例子会被保证永远正确吗?
发布于 2013-01-21 22:16:47
bit模式一点也不改变(在实践中可能遇到的大多数体系结构上)。不同之处在于编译器生成的操作值的指令。
发布于 2013-01-21 22:17:37
如果无符号值太大,无法适应签名的对应方,那么它就是未定义的行为。
255变成-1,因为这些位是-1,这是两种恭维词中的一种。这些碎片什么都不会发生。
https://stackoverflow.com/questions/14448206
复制相似问题