Quando si codifica una sequenza di bit in una stringa (utilizzando un alfabeto non ancora noto in fase di compilazione e con l'obiettivo che la stringa risultante sia il più breve possibile e che l'intero processo sia reversibile), è possibile utilizzare il "approccio divmod", vedi ad es questo post .
Da quanto ho capito, questa appraoch funziona solo con numeri positivi. Nel mio caso, voglio codificare interi con segno a 64 bit (Java Long
), quindi i numeri possono essere sia positivi che negativi.
Finora, ho usato un "trucco" per garantire che tutti i numeri siano positivi aggiungendo due nuovi bit: ho appena impostato il 65 ° bit su 1 e il 66 ° bit su 0. Ciò significa che i numeri positivi rimangono positivi e i numeri negativi diventano positivi (perché quelli principali del complemento a due sono cancellati). Tuttavia, questo approccio presenta due svantaggi:
- Ho bisogno di usare un
BigInt
poiché 64 bit non sono più sufficienti. - Poiché il 65 ° bit è sempre 1, le stringhe risultanti non sono ovviamente le più brevi possibili.
Cos'altro posso fare per codificare un intero con segno a 64 bit? Esiste una variante del "divmod aprroach" che funziona con i numeri firmati?