Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class TestLog {
- public static int findLog(int n) {
- int count = 0;
- int anzahlVerschieben = 1;
- n = n | (n << 1) | 1;
- while (n != -1) {
- n = (n | (n << anzahlVerschieben));
- count++;
- anzahlVerschieben *= 2;
- }
- //Erhalte Intervall (2^(count -1), 2^count]
- //Binäre Suche auf dem erhaltenen Intervall durchführen:
- //int untereSchranke = (int)Math.pow(2, (count -1));
- //int obereSchranke = (int)Math.pow(2, count);
- int untereSchranke = anzahlVerschieben;
- int obereSchranke = anzahlVerschieben * 2;
- while (obereSchranke - untereSchranke > 1) {
- int mitte = untereSchranke + (obereSchranke - untereSchranke) / 2;
- int mitteBinary = n | (n << (mitte - anzahlVerschieben));
- if (mitteBinary == -1) {
- obereSchranke = mitte;
- } else {
- untereSchranke = mitte;
- }
- }
- return obereSchranke;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement