首页
学习
活动
专区
工具
TVP
发布

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

蝎子

下面的讨论,适用于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平台开发者来说,确实十分有帮助。

本文来自:《Why do operations on “byte” result in “int”?》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201226A04Z6A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券