如何获取StaticBigInt的words数量以初始化自定义整数类型?
解决StaticBigInt初始化自定义整数类型时的word数量问题
StaticBigInt并没有直接提供获取word总数的API,但可以通过它的bitWidth属性推导所需的word个数。每个UInt的位宽是固定值(可通过UInt.bitWidth获取),用总位宽除以单个word的位宽并向上取整,就能得到需要遍历的有效word数量。
以下是实现代码:
struct CustomInt: ExpressibleByIntegerLiteral { public var words: [UInt] public init(integerLiteral value: StaticBigInt) { words = [] guard value.bitWidth > 0 else { // 处理数值0的情况,添加一个0作为word words.append(0) return } // 计算需要的word数量:向上取整公式 (总位宽 + 单个word位宽 - 1) / 单个word位宽 let wordCount = (value.bitWidth + UInt.bitWidth - 1) / UInt.bitWidth for i in 0..<wordCount { words.append(value[i]) } } }
补充说明
- 上述代码针对无符号整数场景,如果是有符号类型,需要额外处理符号位逻辑。
- 这种方式能精准获取所有非冗余的有效word,超过bitWidth对应的word必然是0,无需额外添加。
内容的提问来源于stack exchange,提问作者user25846997
相关产品推荐
相关产品推荐

