【问题标题】:Is there way of stopping uint underflow in C#?有没有办法在 C# 中停止 uint 下溢?
【发布时间】:2018-09-29 03:39:34
【问题描述】:

使用 int 测试是否低于 0 。 c# 中的 uint 在低于 0 时会回绕成一个巨大的数字,这在所有编程语言中都是如此。

【问题讨论】:

  • 遗憾的是不可能
  • 为什么不在你减去它之前检查你的 uint 是否大于你要减去的数字呢?如果不是,请将您的 uint 设置为 0。
  • 最有用和最容易被忽视的构建选项之一是项目 > 属性 > 构建选项卡 > 高级按钮,“检查算术上溢/下溢”。非常适合 Debug 配置,非常适合提醒您编写代码以在必要时停止下溢。

标签: c# underflow


【解决方案1】:

你可以这样做

uint i = 0;
i = checked(i - 1);

这将抛出System.OverflowException。虽然它不会保持为零,但至少您可以确定没有发生溢出。

【讨论】:

  • 我不希望这样,它会使我的应用程序太慢。
【解决方案2】:

我只是使用普通的int而不是uint,并检查它的

【讨论】:

  • 考虑到您正在回答自己的问题(这通常不是问题),为什么您首先选择了uint。当然,它是用于正范围。我觉得这个问答对没有用
  • 我认为如果 uint 低于 0,它会保持 0
  • ...如果你减少int-2,147,483,648 值,它会突然环绕到2,147,483,647,反之亦然。这些都是整数值如何以二进制形式存储的症状
猜你喜欢
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多