首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有签名到有符号转换,在位级别上会发生什么?

问没有签名到有符号转换,在位级别上会发生什么?
EN

Stack Overflow用户
提问于 2013-01-21 22:14:10
回答 2查看 1.1K关注 0票数 3

可能重复: 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指令?

编辑:

下面是一个我想知道的场景的例子:

代码语言:javascript
复制
unsigned int uintvar = random();
unsigned int control = uintvar;
assert(control == static_cast<unsigned int>(static_cast<signed int>(uintvar)));

忽略了双重转换会被优化的事实,这个例子会被保证永远正确吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-21 22:16:47

bit模式一点也不改变(在实践中可能遇到的大多数体系结构上)。不同之处在于编译器生成的操作值的指令。

票数 8
EN

Stack Overflow用户

发布于 2013-01-21 22:17:37

如果无符号值太大,无法适应签名的对应方,那么它就是未定义的行为。

255变成-1,因为这些位是-1,这是两种恭维词中的一种。这些碎片什么都不会发生。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14448206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档