Мне нужно перевести код C ++ на Java. У меня есть две проблемы, о которых я беспокоюсь.
1) Перевод «unsigned int» из C ++ в Java как «long».
Я решил использовать долго, чтобы увеличить емкость.
2) Использование побитовых операторов, в частности | а также <<, При условии
Я перевел бы неподписанные значения int в long, это бы
какой плохой эффект для этих операторов? Например, в C ++:
unsigned int a;
unsigned int b;
unsigned int c;
a | (b<<c)
это нормально делать это в Java:
long a, b, c;
a | (b<<c)
Пожалуйста, дайте мне знать о любых проблемах, с которыми вы можете столкнуться
делать эти вещи.
Спасибо
Я считаю, что то, что вы делаете, безопасно и должно хорошо работать на Java. Битовые операции, используемые, как вы показываете, должны работать как положено.
Он должен работать. Помните, что Java long
является 64-битным Единственная реальная разница в том, что целые числа Java подписаны.
Операторы должны вести себя так же, как и для unsigned:
+
, -
, ==
, &
, |
, ^
, <<
Это изменит поведение:
*
, /
, %
, <
использование >>>
вместо >>
иметь неподписанное толкование /2**k
(биты выдвинуты 0
, а не MSB копии).
long
подписано в Java.
Тип данных long — это 64-разрядное целое число со знаком в виде двоичного числа со знаком. Она имеет
минимальное значение -9,223,372,036,854,775,808 и максимальное значение
9,223,372,036,854,775,807 (включительно).
unsigned int
из C ++ длинное слово (32-разрядная на 32-разрядной машине). Он имеет диапазон от 0 до 4 294 967 295.
Bitwise operations
It's important to remember that the unsigned keyword affects
the interpretation, not the representation of a number. In other
words, in cases where we aren't interpreting a value arithmetically— so-called
bitwise operations such as AND, OR, XOR— it makes essentially no
difference whether a value is marked as "signed" or "unsigned"
.
Int без знака эквивалентно long в Java. Таким образом, это влияет на разницу.
Для получения дополнительной информации обратитесь Вот