Oppgave 3
Hvis 2k-1 <= n < 2k, vil k – 1 <= log2(n) < k. Dermed vil avrundingen av log2(n) nedover til nærmeste heltall være lik k – 1. Videre er antall signifikante binære siffer lik k for alle n slik at 2k-1 <= n < 2k. Tilsammen gir dette Setning 1.7.14 b).
Oppgave 5
public static int antallLedendeNuller2(int n) { int antall = 32; // n = 0 har 32 0-biter while (n != 0) { antall--; // en ledende 0-bit mindre n >>>= 1; // skyver bitene i n en mot høyre } return antall; }
Oppgave 6
public static int antallLedendeNuller(int n) { if (n == 0) return 32; int antall = 0; for (int k = 16; k > 0; k >>= 1) { if (n >>> k == 0) antall += k; else n >>>= k; } return antall; }
Oppgave 7
public static int antallLedendeNuller(int n) { int antall = 32; if (n >>> 16 != 0) { antall -= 16; n >>>= 16;} if (n >>> 8 != 0) { antall -= 8; n >>>= 8;} if (n >>> 4 != 0) { antall -= 4; n >>>= 4;} if (n >>> 2 != 0) { antall -= 2; n >>>= 2;} if (n >>> 1 != 0) return antall - 2; return antall - n; }
Oppgave 9
public static int førsteEnBit(int n) { for (int k = 1; k <= 16; k <<= 1) n |= (n >> k); return n ^ (n >>> 1); }
Oppgave 10