为什么对byte的操作会得到int的结果

作者: admin 分类: 技术资讯 发布时间: 2020-12-27 12:18

下面的讨论,适用于C/C++/C#,我决定使用C#代码来演示,为什么?我觉得这段时间对C#这位兄弟的关注还是太少了。

有些人会抱怨,为什么下面的代码会触发编译器的警告:

他们会说:”对一个byte的操作,按理说,结果应该也是一个byte呀,为什么会是一个int?”

要小心了大兄弟,你要求的东西,可能实际上并不是你真正想要的。

此话怎讲?

就依你,假设我们生活在这样一个世界:对任何byte类型变量的操作也会产生byte类型的结果。

如下图所示:

这这个理想世界,变量i的值将会是16。为什么?

因为两个byte类型的变量相加,也会产生一个byte的结果,因为这里存在整型溢出,所以,你会得到16这个结果。惊不惊喜?

类似的:int j = -b;

变量j的值实际上是224,而不是你所预期的-32,也是同样的整型溢出原因导致的。

所以,请再问问自己,这真的是我想要的吗?

让我们来考察下列更加让人防不胜防的代码:

在我们的理想世界中,一旦这场游戏的次数操作了255,则计算结果就是错误的。

为了解决这个问题,你可以这样解决,虽然看起来代码有点丑陋了:

所以,无论你如何精简代码,你都不得不添加上述这些强制类型转换的代码。

让我这样说白了吧:出于安全方面的考虑而出现的语法错误(例如,你知道不会产生溢出,但是你不得不加上强制类型转换),比那些根本摸不着头脑的运行时错误(例如,你忘记在计算工资的代码中添加类型转换,直到财务部的大姐问你为什么本月工资发错数了),要好吧。

总结

行,服了。

我们还是回到这个世界吧:对byte的操作会得到int的结果。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

和丰软件致力于卓越的OA流程信息化管理,您的支持将鼓励我们继续努力!

标签云

粤公网安备 44030502004821号