2 votes

Code de portage du C++ vers le Java avec les opérateurs bit à bit et les int non signés

Je dois traduire du code C++ en Java. Je suis préoccupé par deux problèmes.

1) Traduction de "unsigned int" de C++ à Java en "long". J'ai choisi d'utiliser long pour augmenter la capacité de stockage.

2) Utilisation des opérateurs de type bit, en particulier | et <<. Étant donné que j'ai converti les valeurs unsigned int en long, cela aurait-il un mauvais un effet négatif sur ces opérateurs ? Par exemple, en C++ :

unsigned int a;
unsigned int b;
unsigned int c;

a | (b<<c)

Est-il possible de faire cela en Java ?

long a, b, c;

a | (b<<c)

Veuillez me faire part de tout problème que vous pensez que je pourrais rencontrer. en faisant ces choses.

Merci

2voto

Chris Points 61

long est signé en Java.

Le type de données long est un entier de 64 bits signé en complément à deux. Il a une valeur minimale de -9 223 372 036 854 775 808 et une valeur maximale de -9 223 372 036 854 775 807 (inclus). 9,223,372,036,854,775,807 (inclusive).

unsigned int de C++ est d'un mot (32 bits sur une machine 32 bits). Il est compris entre 0 et 4 294 967 295.

2voto

zch Points 7275

Cela devrait fonctionner. Rappelez-vous que Java long est 64 bits. La seule véritable différence est que les entiers Java sont signés.

Les opérateurs doivent se comporter de la même manière que pour les non signés : + , - , == , & , | , ^ , <<

Ceux-ci changeront le comportement : * , / , % , <

Utilisez >>> au lieu de >> pour avoir une interprétation non signée de /2**k (les bits poussés sont 0 (pas les copies MSB).

1voto

hmatar Points 2199
       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"

. Unsigned int est équivalent à long en java. Cela fait donc une différence. Pour plus d'informations, reportez-vous à ici

1voto

Ivaylo Strandjev Points 38924

Je pense que ce que vous faites est sûr et devrait bien fonctionner en Java. Les opérations par bit utilisées comme vous le montrez devraient fonctionner comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X