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