#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