- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
/* сделать логику переводчика из 10 системы в 2, 8 и 16, что бы на вход было десятичное число,
а на выходе двоичное, восьмеричное и шеснадцатиричное представление */
// для проверки, функциями php
$i=378;
echo "$i в двоичной системе = " . base_convert ($i, 10, 2) . PHP_EOL;
echo "$i в восьмеричной системе = " . base_convert ($i, 10, 8) . PHP_EOL;
echo "$i в шестнадцатиричной системе = " . base_convert ($i, 10, 16) . PHP_EOL;
unset ($i);
// десятичное в двоичное, используя алгоритм http://vestikinc.narod.ru/AB/dec_bin_tr.htm
$a = 378;
$b = ''; // пустая строковая переменная
while ($a != 0) {
$b = ($a % 2) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
$a = (int)($a / 2); //принимаем целую часть частного за новое делимое
}
echo $b . PHP_EOL;
unset ($a, $b);
// десятичное в восьмеричное, используя алгоритм http://vestikinc.narod.ru/AB/dec_oct_tr.htm
$a = 378;
$b = ''; // пустая строковая переменная
while ($a != 0 & $a % 8 < 8) {
$b = ($a % 8) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
$a = (int)($a / 8); //принимаем целую часть частного за новое делимое
}
echo $b . PHP_EOL;
unset ($a, $b);
// десятичное в шестнадцатеричное, через двоичное
$a = 378;
$b = ''; // пустая строковая переменная
while ($a != 0) {
$b = ($a % 2) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
$a = (int)($a / 2); //принимаем целую часть частного за новое делимое
}
$count = strlen($b);
while(($count % 4) != 0) { // если количество символов не кратно 4
$b='0'. $b; // то добавляем в начало 0
$count = strlen($b); // снова вычисляем длину
}
$c = ''; // пустая строковая переменная
for($d = 0; $d < $count; $d = $d + 4) //пока счётчик меньше количества символов, прибавляем 4
{
$c = $c . strtr(substr($b, $d,4), //добавляем к $c замену 4-х символов $b с позиции $d
array('0000'=>'0',
'0001'=>'1',
'0010'=>'2',
'0011'=>'3',
'0100'=>'4',
'0101'=>'5',
'0110'=>'6',
'0111'=>'7',
'1000'=>'8',
'1001'=>'9',
'1010'=>'A',
'1011'=>'B',
'1100'=>'C',
'1101'=>'D',
'1110'=>'E',
'1111'=>'F'));
}
echo $c . PHP_EOL;
unset ($a, $b, $c, $d);
// десятичное в шестнадцатеричное, используя алгоритм http://vestikinc.narod.ru/AB/dec_hex_tr.htm
$a = 378;
$b = ''; // пустая строковая переменная
while ($a != 0) {
if ($a % 16 > 0 & $a % 16 < 10):
$b = ($a % 16) . $b;
elseif ($a % 16 == 10):
$b = 'A' . $b;
elseif ($a % 16 == 11):
$b = 'B' . $b;
elseif ($a % 16 == 12):
$b = 'C' . $b;
elseif ($a % 16 == 13):
$b = 'D' . $b;
elseif ($a % 16 == 14):
$b = 'E' . $b;
elseif ($a % 16 == 15):
$b = 'F' . $b;
endif;
$a = (int)($a / 16); //принимаем целую часть частного за новое делимое
}
echo $b . PHP_EOL;