Leser: 2
|< 1 2 >| | 14 Einträge, 2 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# base($number, $inbase, $outbase) transforms a number from one
# base to another.
#
# Examples:
# base(17, 9, 2) converts 17 (base 9) to base 2: 10000.
# base("fff", 16, 3) converts fff (base 16) to base 3: 12121200.
# base("g", 17, 10) converts g (base 17) to base 10: 16.
#
# Uses the logbase() function defined below.
#
# Returns undef on error.
#
sub base {
my ($number, $inbase, $outbase) = @_;
my ($realnum, $output, $i, $digit);
# Convert the number (which might have letters) to lowercase.
$number = lc($number);
# Return undef (or an empty list) if the base is too weird.
return if $inbase > 36 or $outbase > 36 or
$inbase < 2 or $outbase < 2;
# Convert $number from base $inbase to base 10.
for $digit (reverse split(//, $number)) {
$digit = ord($digit) - 87 if ord($digit) > 96;
return if $digit >= $inbase;
$realnum += $digit * ($inbase ** $i++);
}
# Convert the number from base 10 to $outbase.
# logbase() is defined below.
for ($i = int(logbase($realnum, $outbase)); $i >= 0; $i--) {
$digit = int($realnum / ($outbase ** $i));
$realnum -= $digit * ($outbase ** $i);
$digit = ord($digit + 49) if ord($digit) > 57;
$output .= $digit;
}
return $output;
}
# base(17, 9, 2) converts 17 (base 9) to base 2: 10000.
print base(17, 9, 2), "\n";
# base("fff", 16, 3) converts fff (base 16) to base 3: 12121200.
print base("fff", 16, 3), "\n";
# base("g", 17, 10) converts g (base 17) to base 10: 16.
print base("g", 17, 10), "\n";
# logbase($number, $base) computes the logarithm of number in base $base.
#
# Example: logbase(243, 3) is 5, because 3 ** 5 is 243.
#
sub logbase {
my ($number, $base) = @_;
return if $number <= 0 or $base <= 0 or $base == 1;
return log($number) / log($base);
}
1
2
3
4
Ausgangszahl[Ziffer1,Ziffer2,Ziffer3] =
Ziffer3 + Zielbasis^(StelleDerZiffer-1) +
Ziffer2 + Zielbasis^(StelleDerZiffer-1) +
Ziffer1 + Zielbasis^(StelleDerZiffer-1) = ZahlInZielbasis
1
2
3
4
Ausgangszahl[Ziffer1,Ziffer2,Ziffer3] =
Ziffer3 * Zielbasis^(StelleDerZiffer-1) +
Ziffer2 * Zielbasis^(StelleDerZiffer-1) +
Ziffer1 * Zielbasis^(StelleDerZiffer-1) = ZahlInZielbasis
1
2
3
4
Ausgangszahl[Ziffer1,Ziffer2,Ziffer3] =
Ziffer1 * Zielbasis^(AnzahlDerZiffern-StelleDerZiffer) +
Ziffer2 * Zielbasis^(AnzahlDerZiffern-StelleDerZiffer) +
Ziffer3 * Zielbasis^(AnzahlDerZiffern-StelleDerZiffer) = ZahlInZielbasis
1
2
3
4
Wert(Ausgangsbasis,Ziffer1,Ziffer2,Ziffer3) =
Ziffer1 * Ausgangsbasis^(AnzahlDerZiffern-StelleDerZiffer) +
Ziffer2 * Ausgangsbasis^(AnzahlDerZiffern-StelleDerZiffer) +
Ziffer3 * Ausgangsbasis^(AnzahlDerZiffern-StelleDerZiffer)
1
2
3
4
5
6
7
Wert(16, F, E) = /* F=15, E=14 */
15 * 16^(2-1) +
14 * 16^(2-2)
= 15 * 16^1 + 14 * 16^0
= 15*16 + 14*1 = 254
Was so viel bedeutet wie:
X"FE" = 254
|< 1 2 >| | 14 Einträge, 2 Seiten |