Знак, начинающийся с фиксированной разрядности в Java/Groovy

#java #groovy #bit-manipulation #twos-complement

#java #groovy #манипулирование битами #двойки-дополнение

Вопрос:

Я хочу подписать расширение 12-битных чисел до 32 бит в Groovy (или Java, конечно). Я могу найти различные рецепты для этого в C / C и так далее, Но не для Groovy / Java — может кто-нибудь дать мне алгоритм или фрагмент кода?

Комментарии:

1. Алгоритм — это «рецепт». Тот же алгоритм, который применяется для C, может быть применен и для Java.

2. (x << 20) >> 20 или (x ^ 0x800) - 0x800 , в зависимости от того, что вам больше нравится / удобнее. Первый легче понять, но он редко дает дополнительные возможности для упрощения.

3. @harold, я вижу, как работает второй, но не первый, если только это не арифметические, а не логические сдвиги

4. @adrianmcmenamin да >> , в Java это арифметический сдвиг, логический сдвиг >>>

5. @гарольд. Ах, и в этом заключается моя основная проблема. Я этого не понимал (будучи программистом на C в глубине души), и именно поэтому мой оригинальный промокод не работал. Вы хотели бы опубликовать свой комментарий в качестве ответа, и я его приму?

Ответ №1:

С благодарностью @harold:

  (x << 20) >> 20 or (x ^ 0x800) - 0x800, whichever you like best/is more   convenient. The first is easier to understand but it rarely gives further possibilities for simplification