Вы не зашли.
Главная » PHP » Разъяснение в битах.
#21. TLENS Off (14)
Moderator
2011.11.24 22:10
Ну вообще то да
#22. TLENS Off (14)
Moderator
2011.11.25 00:12
Кстати вот перевел так называемый всеми волшебный код "$a ^= $b ^= $a ^= $b;" (Замена двух переменных местами не используя третью переменную) в читаемый для человека.
Код:
span style="color: #0000BB"><?php$a -= $b;$b += $a;$a = $b - $a;
Добавлено спустя   5 минут  20 секунд:
ЗЫ. Не работает с чаровскими типами т.e. только с int float и double (unsigned или signed)
Ну да и волшебный код теряет почему то два байта при работе со строкой
Отредактировано TLENS (2011.11.25 00:12)
#23. TLENS Off (14)
Moderator
2011.11.25 04:04
Паша помоги плис.
Упражнение 2.6. Напишите функцию setbits(x, p, n, y), возвращающую значение x, в котором n битов, начиная с p-й позиции, заменены на n правых разрядов из y (остальные биты не изменяются).
Я вот сделал функцию
Код:
span style="color: #0000BB"><?phpfunction setbits($x, $p, $n, $y) { $p = ($p < $n) ? $n : $p; return ($x >> $p << $n ^ $y & ~(~0 << $n)) << $p - $n ^ $x & ~(~0 << $p - $n);}$x = bindec('100000000000000');$y = bindec('10101010101');$p = 10;$n = 5;$c = $y;echo decbin(setbits($x, $p, $n, $y));
Все вроде нормально но когда в $x меньше битов чем в $y то все равно происходит сдвиг в право на  $p - $n (48 символ) и вставка  ^ $x & ~(~0 << $p - $n);
Можно ли этого избавится не используя переключателей и доп. переменных?
PS. Это не так уж и важно. Просто интерес.
#24. tipsun Off (19)
Moderator
2011.11.25 09:09
Я вот только складывать и умножать понял как в 2-чной системе smile
Было бы не плохо вычитать и делить научится.

Код:
1101 1101
+1111 *1111
------- ------
11100 1101
1101
1101
1101
---------
100111
100111
---------
11000011
Отредактировано tipsun (2011.11.25 09:09)
Страниц: 1 2 3 Все
Главная
WEB
PunBB Mod v0.6.2
0.014 s