我正在尝试使用按位NOT运算符快速翻转数字的所有位~
func binary(int: Int) -> String {
return String(int, radix: 2)
}
let num = 0b11110000
binary(num) //prints "11110000"
let notNum = ~num
binary(notNum) //prints "-11110001"
我的理解是
notNum
应该打印出00001111
(docs),而不是打印出-11110001
。怎么回事? 最佳答案
这不是按位运算符的问题,而是String
初始值设定项的行为问题。init(_:radix:uppercase:)
中有2个String
初始值设定项
public init<T : _SignedIntegerType>(_ v: T, radix: Int, uppercase: Bool = default)
public init<T : UnsignedIntegerType>(_ v: T, radix: Int, uppercase: Bool = default)
要获得预期结果,必须使用
UnsignedIntegerType
一个:let num:UInt = 0b11110000
let notNum = ~num
String(notNum, radix: 2)
// -> "1111111111111111111111111111111111111111111111111111111100001111"
或:
let num = 0b11110000
let notNum = ~num
String(UInt(bitPattern: notNum), radix: 2)
// -> "1111111111111111111111111111111111111111111111111111111100001111"