2017-05-17 5 views
0

Est-il un moyen facile de calculer:Comment calculer 2^h * Ceil (i/2^h)

(2^h)*ceil(i/(2^h)) 

où i et h sont des nombres entiers, sans utiliser explicitement la fonction de plafond?

Par exemple, pour (2^h) * étage (i/(2^h)) peut être calculée en utilisant quelque chose comme

i&-(1<<h) 

qui n'utilise pas la fonction du sol.

+0

@Dijkgraaf java –

Répondre

0

Évidemment, vous voulez dire avec ^ exponentiation et non XOR bit à bit. Donc quelque chose comme

(i + (1 << h) - 1) & (-1 << h) 

devrait fonctionner.

+0

Ne pourrions-nous pas utiliser '-1 << h' ici et enregistrer une opération? – harold

+0

@harold oui, cela devrait fonctionner aussi bien. – Henry

+0

désolé, pourriez-vous mettre à jour la réponse pour inclure ce que @harold mentionné? –