【问题标题】:Binary operator '/' cannot be applied to two 'UInt32' operands二元运算符“/”不能应用于两个“UInt32”操作数
【发布时间】:2016-11-10 21:34:41
【问题描述】:

这是我的代码。

var frameCount = INT_MAX
...

let totalSize: UInt32 = 4096
let itemSize: UInt32 = 64
frameCount = totalSize / itemSize

我收到“二元运算符 '/' 不能应用于两个 'UInt32' 操作数”错误消息。 这真的不可能吗?还是我错过了什么?

【问题讨论】:

  • frameCount 不是UInt32 ;)
  • 为什么要预先设置变量?只需let frameCount = totalSize / itemSize,编译器就能解决。
  • @johnelemans:这是不正确的。 Swift 可以进行整数除法(并且结果会被截断为整数,就像在 C 等许多其他语言中一样)。
  • 感谢指正。

标签: ios swift uint32


【解决方案1】:

错误信息有点误导。 INT_MAX 定义为

public var INT_MAX: Int32 { get }

所以

var frameCount = INT_MAX

frameCount 被定义为Int32 类型的变量。 除法totalSize / itemSize 的结果是UInt32 但是,Swift 不会隐式转换类型。

您可以通过将初始定义更改为来解决此问题

var frameCount = UINT32_MAX

或者更简单,让编译器推断类型:

let totalSize: UInt32 = 4096
let itemSize: UInt32 = 64
let frameCount = totalSize / itemSize

如果您需要将结果作为有符号整数,那么您必须 显式转换,例如

let frameCount = Int32(totalSize / itemSize)

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2015-09-01
    • 2017-11-22
    • 2018-06-23
    • 2023-03-10
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多