我试图将这个Java代码转换为swift 2.0
long checksumValue = 4253726258L;
int liCrc32 = (int)checksumValue;
System.out.println("liCrc32" + liCrc32)
Run Code Online (Sandbox Code Playgroud)
LiCrc32等于-41241038
我的版本很快
let int64: Int64 = 4253726258
let a:Int = Int(int64)
Run Code Online (Sandbox Code Playgroud)
a返回我4253726258
我不明白为什么在Java中价值是负面的?
来自Swift文档
Int在大多数情况下,您不需要选择要在代码中使用的特定大小的整数.Swift提供了一个额外的整数类型Int,它与当前平台的本机字大小相同:
在32位平台上,
Int大小与之相同Int32.在64位平台上,
Int大小与之相同Int64.除非您需要使用特定大小的整数,否则请始终
Int在代码中使用 整数值.这有助于代码一致性和互操作性.即使在32位平台上,Int也可以存储-2,147,483,648和2,147,483,647之间的任何值,并且对于许多整数范围来说足够大.
积分类型是
byte,short,int,和long其值是8位,16位,32位分别和64位带符号的二进制补码整数,[...]
缩小的原始转换可能丢失关于数值的总量值的信息,并且还可能失去精度和范围.
您使用了错误的类型:Swift的类型Int不一定与Java的类型匹配int,因为它的大小是特定于平台的。从您的输出来看,您的平台使用64位Int。确认方法如下:
println(sizeof(Int)) // Should print 8 on your platform
Run Code Online (Sandbox Code Playgroud)
Int32匹配Java的int。不幸的是,这种变化
let int64: Int64 = 4253726258
let a:Int32 = Int32(int64)
Run Code Online (Sandbox Code Playgroud)
可能由于Swift实施中的错误而导致问题。
如果需要对32位值进行符号扩展,则可以这样进行:
let int64: Int64 = 4253726258
let a:Int = Int((int64 << 32) >> 32)
println(a) // prints -41241038
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5157 次 |
| 最近记录: |