Ios Xcode:swift Int和Objective-C Int之间的不同行为
我正在尝试将Ios Xcode:swift Int和Objective-C Int之间的不同行为,ios,objective-c,swift,iphone,xcode11.4,Ios,Objective C,Swift,Iphone,Xcode11.4,我正在尝试将Swift函数转换为Objective-C。这是函数的签名 斯威夫特: func hammingWeight(_ n: Int) -> Int 目标-C -(int) hammingWeight:(int) number 我正在将此值传递给函数/方法: 00000000000000000000000000001011 对于Swift,如果我打印n的值,它会打印: p n (Int) $R2 = 1011 p number (int) $0 = 521 如果是Objec
Swift
函数转换为Objective-C
。这是函数的签名
斯威夫特:
func hammingWeight(_ n: Int) -> Int
目标-C
-(int) hammingWeight:(int) number
我正在将此值传递给函数/方法:
00000000000000000000000000001011
对于Swift,如果我打印n的值,它会打印:
p n
(Int) $R2 = 1011
p number
(int) $0 = 521
如果是Objective-C打印:
p n
(Int) $R2 = 1011
p number
(int) $0 = 521
我的问题是为什么Objective-C改变了我传球的价值。这对我来说毫无意义。你们中有谁知道为什么会发生这种情况,或者是否有办法解决这个问题
我会非常感谢你的帮助
这是完整的Objective-C实施:
@interface DoSomething : NSObject
@end
@implementation DoSomething
-(int) hammingWeight:(int) number {
NSLog(@"number %d", number);
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
DoSomething *doIt = [DoSomething new];
[doIt hammingWeight:00000000000000000000000000001011];
}
}
不同之处在于,在(目标-)c中,由于前缀为0
,您给定的数字被解释为八进制,而在Swift中,它被解释为十进制
对于Swift前缀0o
中的八进制整数文本
中有关八进制整数文字的信息 中的八进制整数信息
oct中的1011是521 dec,因此请确保您没有将其作为oct编号传递给objc函数。@Hossamsher如果我已将其添加到完整的objective-c实现中,则您将其作为oct发送。。尝试将0xB作为十六进制发送,即
1011
作为二进制发送,或将11
作为十进制发送。如果您想将其作为oct发送,则1011
二进制文件为013
oct