【发布时间】:2017-04-03 11:38:10
【问题描述】:
例如
-1234567890 = 10110110 01101001 11111101 00101110
10110110 = 182
01101001 = 105
11111101 = 253
00101110 = 46
我不明白这应该如何工作。提前致谢!
【问题讨论】:
标签: scala binary integer bit-manipulation
例如
-1234567890 = 10110110 01101001 11111101 00101110
10110110 = 182
01101001 = 105
11111101 = 253
00101110 = 46
我不明白这应该如何工作。提前致谢!
【问题讨论】:
标签: scala binary integer bit-manipulation
这可以像使用任何其他语言一样通过位移位完成:
scala> val x = -1234567890
x: Int = -1234567890
scala> x & 0xFF
res0: Int = 46
scala> (x >> 8) & 0xFF
res1: Int = 253
scala> (x >> 16) & 0xFF
res2: Int = 105
scala> (x >> 24) & 0xFF
res3: Int = 182
基本上,您将值向右移动所需的字节数,然后应用掩码以仅保留最后一个字节:
0x000000FF == 0b00000000000000000000000011111111
【讨论】:
scala> :pa
// Entering paste mode (ctrl-D to finish)
def getBinaryString(i: Int) = {
val bs = i.toBinaryString
val bs32 = if (bs.length == 32) bs else ("0" * (32 - bs.length)) + bs
bs32
}
// Exiting paste mode, now interpreting.
getBinaryString: (i: Int)String
scala> val i = -1234567890
i: Int = -1234567890
scala> val bs = getBinaryString(i)
bs: String = 10110110011010011111110100101110
scala> val first8 = bs.substring(0, 8)
first8: String = 10110110
scala> val first8Int = Integer.parseInt(first8, 2)
first8Int: Int = 182
【讨论】: