【问题标题】:Is there a negative zero?有负零吗?
【发布时间】:2010-11-16 22:41:42
【问题描述】:

我正在编写一个简单的计算器,只是为了开始使用 iPhone 开发。问题是我有一个 (-) 按钮,它应该通过执行简单的*-1 来否定已经放在屏幕上的任何内容。它工作正常,除非前一个输入是0。

场景:在空白屏幕或0 的情况下,我点击 (-) 来否定。然后,当我点击例如9 时,我希望它读取(或者更确切地说是)-9。不是现在的9。仅供参考,我正在到处使用原始整数,但我准备中止它。

问题:如何表示负0?我可以使用支持它的数据类型吗? NSInteger?

或者是使用 state boolean 和 stringWithFormat 等做一些 hacky 解决方法的唯一方法?

感谢您的帮助。 /O

【问题讨论】:

  • 在我看来,您的问题实际上是“我应该如何设计我的程序来输入负数?”,而不是“我怎样才能表示负 0?”。 Unix xcalc 和 Windows Calculator 程序都不会像您描述的那样接受负输入——它们在该上下文中将“-”解释为中缀减法运算符,并将后面的数字解释为第二个操作数。通常翻转符号的键标记为“+/-”而不是“-”,如果当前显示“0”则无效。
  • 也许你是对的,但我似乎已经得到了我所希望的答案。不过,关于标签的好点,我会改变的。有趣的是,iPhone 计算器的工作方式符合我的要求,但 Mac 上的计算器却没有。它和我的“未完成”的一样。 :)

标签: iphone objective-c


【解决方案1】:

float 和 double 支持 -0(如果没有记错,这与 0 不同)。请参阅here 了解更多信息,尽管我不相信 在您的应用程序中使用-0 会对用户特别有帮助。您是否有一个引人注目的用例需要它?

【讨论】:

  • 用例将是我描述的场景。如果它令人信服,我真的不知道;)它只是任何计算器中的功能,例如原生 iPhone。我只是在模仿。
  • 刚刚想到另一个用例:假设我想计算 15 减去 -5。自然是点击 15,然后是加号按钮,然后是 negate 按钮,然后是 5。这现在不起作用。我必须在 5 之后否定。
【解决方案2】:

没有负零这样的东西。

对于二进制整数,将符号位设置为 1 并将所有其他位设置为零,您将获得该整数大小的最小负值。 (假设有符号数。)

【讨论】:

  • 负零实际用于数学分析,尤其是极限计算。不过,我不知道它在一个简单的计算器中有多大用处。
  • 对于二进制补码有符号整数,没有负零。但是对于其他格式,比如 IEEE 浮点数或者使用符号位和幅度,其实是有一种方式来表示 -0 的。
  • 是的,我发现一个维基百科条目提到 en.wikipedia.org/wiki/Signed_zero,但我坚持我对 int 的回答。同样,我使用的 float 和 double 实现使用带符号的零作为 Not a Number 的标志。
  • @Alex Martini - 我想这真的取决于 iPhone 遵循的 IEEE 规范。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2019-12-16
相关资源
最近更新 更多