我试图使用按位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
。这是怎么回事?
答案 0 :(得分:4)
这不是按位运算符的问题,而是String
初始化程序的行为问题。
init(_:radix:uppercase:)
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"
OR:
let num = 0b11110000
let notNum = ~num
String(UInt(bitPattern: notNum), radix: 2)
// -> "1111111111111111111111111111111111111111111111111111111100001111"
答案 1 :(得分:3)
那是因为你使用的是Int而不是UInt8:
试试这样:
func binary(uint8: UInt8) -> String {
return String(uint8, radix: 2)
}
let num:UInt8 = 0b11110000
binary(num) //prints "11110000"
let notNum = ~num
binary(notNum) //prints "1111"