蝎子
下面的讨论,适用于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”?》
领取专属 10元无门槛券
私享最新 技术干货