【问题标题】:Operator << cannot be applied to operands of type long and long运算符 << 不能应用于 long 和 long 类型的操作数
【发布时间】:2014-11-07 19:33:56
【问题描述】:

我正在尝试在 long 上使用 &lt;&lt; 运算符,如下所示:

((long) num3) << ( 2 + (long) num4)))

这给了我以下错误:

运算符

如果我不将num4 转换为long,则没有错误。但是,我不能将其保留为int。有没有其他办法解决这个问题?

【问题讨论】:

  • 你真的想要&lt;&lt;,而不是&lt;
  • 你为什么要在运算符中转换为long?进行位移并将结果转换为long。问题解决了。
  • 将 long 移位超过 64 位是没有意义的,因此右手运算符不需要是 long。
  • 正如@vcsjones 所说,((long) num3) &lt;&lt; ( 2 + num4)
  • “遗憾的是我不能将其保留为 int”:为什么?无论如何,你到底想做什么?

标签: c# bit-shift


【解决方案1】:

正确的操作数必须是int,而不是long。使用 long 作为要移位的位数是没有意义的,因为 C# 中的整数类型永远不会超过 64 位。

【讨论】:

  • 呃,为什么投反对票?我说错了吗?请在您投反对票时发表评论,以便我知道出了什么问题...
  • 这是正确的,不知道为什么有人反对它。 C# 规范基本上是在 7.9 中说的。 “第二个操作数的类型必须始终是 int。”假设动态没有被使用。
  • 我没有投反对票.. 但我猜有人可能不喜欢这个答案,这是一个不知道为什么问这个问题的人说“我不能把它作为一个整数”的答案。”因此,答案成为原始问题的“适当”答案的可能性较低。即使它正确地陈述了事实。只是我的理论..我也不喜欢它,当没有任何 cmets 的任何事情都被否决时..所以我分享一个想到的观点。
  • 那为什么不使用字节呢?在这种解释中使用 int 是没有意义的。
  • 是的。但是你解释了。
猜你喜欢
  • 2014-05-27
  • 2022-06-11
  • 2016-05-15
  • 2017-09-29
  • 1970-01-01
  • 2021-07-27
  • 2020-10-19
  • 2015-01-25
  • 2011-12-31
相关资源
最近更新 更多