首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C中有符号到无符号的转换-它总是安全的吗?

在C中有符号到无符号的转换-它总是安全的吗?
EN

Stack Overflow用户
提问于 2008-09-09 04:36:45
回答 3查看 191.8K关注 0票数 147

假设我有下面的C代码。

代码语言:javascript
复制
unsigned int u = 1234;
int i = -5678;

unsigned int result = u + i;

这里正在进行什么隐式转换,这段代码对ui的所有值都是安全的吗?(安全的意义是,即使本例中的result将溢出到某个巨大的正数,我也可以将其转换回int并获得真正的结果。)

EN

回答 3

Stack Overflow用户

发布于 2008-09-08 20:51:01

当添加一个无符号变量和一个有符号变量(或任何二元操作)时,这两个变量都会被隐式转换为无符号变量,在这种情况下,这将导致巨大的结果。

因此,从某种意义上说,它是安全的,结果可能是巨大的和错误的,但它永远不会崩溃。

票数 4
EN

Stack Overflow用户

发布于 2008-09-08 20:52:33

当从有符号转换为无符号时,有两种可能性。最初为正的数字保持(或解释为)相同的值。最初为负数的数字现在将被解释为更大的正数。

票数 3
EN

Stack Overflow用户

发布于 2008-09-08 21:08:12

正如前面所回答的,您可以在已签名和未签名之间来回转换,没有任何问题。有符号整数的边界大小写是-1 (0xFFFFFFFFF)。尝试添加和减去它,你会发现你可以回溯并得到它是正确的。

然而,如果你打算来回转换,我强烈建议命名你的变量,这样它们的类型就很清楚了,例如:

代码语言:javascript
复制
int iValue, iResult;
unsigned int uValue, uResult;

如果在没有提示的情况下命名变量,那么很容易被更重要的问题分散注意力,忘记哪个变量是什么类型。您不希望强制转换为无符号类型,然后将其用作数组索引。

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

https://stackoverflow.com/questions/50605

复制
相关文章

相似问题

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