Scala直接支持使用十六进制和八进制数:
scala> 01267 + 0100
res1: Int = 759
scala> 0x12AF + 0x100
res2: Int = 5039
Run Code Online (Sandbox Code Playgroud)
但是你如何在Scala中将整数表示为二进制数?
Kim*_*bel 23
如果性能不是问题,您可以使用String并将其转换为整数.
val x = Integer.parseInt("01010101", 2)
Run Code Online (Sandbox Code Playgroud)
部分不支持二进制数,因为您可以轻松地将十六进制转换为二进制,反之亦然.为了使您的代码更清晰,您可以将二进制数放在注释中.
val x = 0x55 //01010101
Run Code Online (Sandbox Code Playgroud)
Eug*_*ako 18
在2.10中你可以为它创建一个字符串插值器,例如它可以写入b"0010"均值2.使用宏可以消除相关的运行时开销,并在编译时进行转换.看看Jason Zaugg的宏观世界,看看它的实际效果:
scala> b"101010"
res4: Int = 42
scala> b"102"
<console>:11: error: exception during macro expansion: invalid binary literal
b"102"
^
Run Code Online (Sandbox Code Playgroud)
使用2.10中的新"隐式类"和"值类"机制,您可以编写类似这样的内容来添加便捷方法,而无需创建对象的开销:
implicit class IntToBase( val digits:String ) extends AnyVal {
def base(b:Int) = Integer.parseInt( digits, b )
def b = base(2)
def o = base(8)
def x = base(16)
}
Run Code Online (Sandbox Code Playgroud)
这可以让你做的事情
"555".o // 365 decimal
Run Code Online (Sandbox Code Playgroud)
并且实际上并未创建任何IntToBase对象.
如果你从@agilesteel建议的"看起来像二进制"的整数转换,你需要小心.例如0101.b,尝试将65十进制转换为二进制(初始0表示八进制),而101.b将尝试将101十进制转换为二进制.尝试从一个String转换Integer.parseInt,从一个数字转换为二进制String表示,它才真正有意义Integer.toString(x, 2).
我想不出程序化二进制文字的太多用例.也就是说,他们已经将Java 7作为带前缀的数字0b,所以如果他们很快没出现在Scala中,我会感到惊讶.不过,15年来Java似乎已经没有它们了.
| 归档时间: |
|
| 查看次数: |
18266 次 |
| 最近记录: |