Mat*_*ing 6 .net c# fxcop overflow
我有以下函数从高字节和低字节获取一个int:
public static int FromBytes(byte high, byte low)
{
return high * (byte.MaxValue + 1) + low;
}
Run Code Online (Sandbox Code Playgroud)
当我用FxCop分析程序集时,我收到以下严重警告:
CA2233:OperationsShouldNotOverflow
如果没有先验证操作数以防止溢出,则不应进行算术运算.
我无法看到这可能会溢出,所以我只是假设FxCop过于热心.
我错过了什么吗?可以采取哪些措施来纠正我所拥有的(或至少使FxCop警告消失!)?
它将它们作为字节计算.
试试这个
return (int)high * ((int)byte.MaxValue + 1) + (int)low;
Run Code Online (Sandbox Code Playgroud)
正如Daniel A. White 指出的那样,您收到该消息是因为“(byte.MaxValue + 1)”溢出了一个字节。
但我不会进行转换和乘法,而是简单地按以下代码中的方式移动位:
public static int FromBytes(byte high, byte low) {
return high << 8 | low;
}
Run Code Online (Sandbox Code Playgroud)
作为副作用,此代码可能会执行得更好。我还没有检查生成的 IL 或 x86 以查看编译器和/或 JITter 是否足够智能来优化原始表达式。
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |