Convertir long de deux int et vice versa
Comment puis-je convertir des deux 32 bits entiers (int
) pour un 64 bits long
et vice-versa?
De quelle façon vous voulez les convertir? Une seule possibilité: (a << Integer.TAILLE) | b
Signé ou non signé? Si non signé, alors ce serait les valeurs négatives signifient?
Double Possible de Java stocker deux ints dans une longue
Signé ou non signé? Si non signé, alors ce serait les valeurs négatives signifient?
Double Possible de Java stocker deux ints dans une longue
OriginalL'auteur user1293081 | 2012-05-21
Vous devez vous connecter pour publier un commentaire.
En Java, vous n'avez pas tout à fait aussi grand nombre de parenthèses, ou en masque sur le revers de calcul.
for (long i = Long.MIN_VALUE; i <= Long.MAX_VALUE; i++) {...
292 ans est beaucoup beaucoup moins que ce qu'il va prendre. Mon ordinateur fait également valoir 292 ans, comme tout le monde elses. Pour moi
(stop - start)*2.0/reps*Long.MAX_VALUE)
est 1.207154932183553E22 tout en Long.MaxValue est 9223372036854775807 ainsi, lorsque la fonte de(long)
arrive tout le monde se retrouve avec 9223372036854775807. Que c'est 1/1308th la vraie valeur du temps doit être en fait de 382 000 ans. (Encore +1, bien que depuis la réelle réponse est correcte)Haha, très agréable Richard. Je suis dans l'habitude de ne jamais faire la millis-à-quelque-chose-d'autre conversion manuellement, mais j'ai aussi rarement essayer d'obtenir milliseconde sur des centaines (ou des centaines de milliers) d'années. Comme je ne suis plus qu'un professeur, je vais juste modifier l'ensemble de "l'exercice". La réponse n'a pas besoin d'être si longue.
Désolé si c'est clair pour tout le monde. Quelqu'un peut-il expliquer cela s'il vous plaît. Je comprends la première partie que nous sommes en annulant la dernière 32 bits. Qu'est-ce que la deuxième partie de faire. Ce qui va ET avec toutes les 1 donner? J'ai essayé avec (la(longue)a << 32) + b et il donne le même à mettre et c'est pourquoi je me demande ce que le masque est en place.
(long)a << 32 + b ne fonctionne que si b est positif. En Java, les entiers sont signés, de sorte que vous avez à traiter de façon adéquate avec le signe. Nous ne sommes pas ANDing avec toutes les 1, le masque est un long (64 bits) avec les 32 bits de poids faible que 1, il traite efficacement b comme un unsigned int, quand nous sommes les stocker dans une longue.
OriginalL'auteur Fuwjax
Ints à longs:
Je vais le laisser comme un exercice pour le lecteur pour effectuer le calcul inverse. Mais l'astuce est, utiliser plus de bit-quarts et peu-masques.
b < 0
?Bonne prise!
Je pense que b est pourrait bien déjà être supposé pour être valide, étant donné les circonstances.
Laissé comme exercice pour le lecteur...
Cette réponse est subtilement mal: ce sera un échec pour
b = 0x1FFFFFFF
, sur le compte de contenant (comme de ce commentaire) sept Fs dans le masque, et non huit. Cela signifie qu'il ne parvient pas non seulement pour toutes les valeurs négatives de b (comme la réponse, sans masque serait un échec), mais aussi pour les grandes valeurs positives de b.OriginalL'auteur Oliver Charlesworth