m
â
0xef1bf05d
; 它是
0x3c3ca4efef1bf05d
.
这个
%x
只处理32位值,而您正在处理64位值。使用
%lx
或
String(m, radix: 16)
使用64位值:
let a: UInt = 0x6177206d, b: UInt = 0x9e3779b1
let m: UInt = a * b
print("""
let m = \(String(format:"%lx * %lx = %lx", a, b, m))
m>>4 = \(String(format:"%lx", m >> 4))
m>>8 = \(String(format:"%lx", m >> 8))
m>>16 = \(String(format:"%lx", m >> 16))
m>>32 = \(String(format:"%lx", m >> 32))
""")
或使用
%016lx
如果您想看到它的零填充(使其更容易看到过程中的移动),请:
let m = 000000006177206d * 000000009e3779b1 = 3c3ca4efef1bf05d
m>>4 = 03c3ca4efef1bf05
m>>8 = 003c3ca4efef1bf0
m>>16 = 00003c3ca4efef1b
m>>32 = 000000003c3ca4ef