ios - Xcode:swift Int 和 Objective-C int 之间的不同行为
问题描述
我正在尝试将Swift
函数转换为Objective-C
. 这是函数的签名
迅速:
func hammingWeight(_ n: Int) -> Int
Objective-C
-(int) hammingWeight:(int) number
我将此值传递给函数/方法:
00000000000000000000000000001011
在 Swift 的情况下,如果我打印 n 的值,它会打印:
p n
(Int) $R2 = 1011
在 Objective-C 打印的情况下:
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];
}
}
解决方案
不同之处在于,在 (Objective-)c 中,由于前缀的原因,您给定的数字被解释为八进制0
,而在 Swift 中,它被解释为十进制。
对于 Swift prefix 中的八进制 Int 文字0o
。
Swift 文档中有关八进制 Int 文字的信息c 文档
中有关八进制整数的信息
// Swift:
(lldb) po 0o0000000000000000000000000001011;
521
(lldb) po 00000000000000000000000000001011;
1011
// Objective-C
(lldb) po 1011
1011
(lldb) po 01011
521
推荐阅读
- django - Django检查查询集响应是否为空
- php - 生成的 XML 的 CData 部分中出现奇怪的字符
- android - .pem 文件无法被谷歌开发者支持系统解码
- arrays - Perl 去掉引号和空格
- python - 如何通过 ssh 发送自定义数据集?
- java - 从 Java 到 C# 的 AES 加密
- ruby-on-rails - 如何在 Rails 6 模型关注点中构建动态枚举?
- java - 最大值和最小值的递归范围输出
- c# - Blazor 滑块范围输入与按钮 - 在移动 Android 浏览器与浏览器上有所不同
- javascript - 如何使用 onchange 函数动态禁用工具提示下拉列表中的元素