Как я могу изменить короткую позицию в Scala? - PullRequest
0 голосов
/ 01 марта 2019
 def reverse(w: Short): Short = { w.toBinaryString.reverse.toShort  }

Это должно работать так:

reverse(0x0000.toShort)   
0x0000.toShort



reverse(0xFFFF.toShort)

0xFFFF.toShort



reverse(0xAAAA.toShort)  

0x5555.toShort 

reverse(0x1234.toShort)

0x2C48.toShort

1 Ответ

0 голосов
/ 01 марта 2019

Я бы отказался от перевода String для более математического подхода.

def reverse(w :Short) :Short =
  Stream.iterate(w.toInt, 16)(_ >> 1)
        .foldLeft(0:Short){case (s,i) => ((s<<1)+(i&1)).toShort}

проверка:

reverse(0) == 0                    //res0: Boolean = true
reverse(-1) == -1                  //res1: Boolean = true
reverse(0xAAAA.toShort) == 0x5555  //res2: Boolean = true
reverse(0x1234.toShort) == 0x2C48  //res3: Boolean = true
...