#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. Это не так уж и важно. Просто интерес.
Я вот только складывать и умножать понял как в 2-чной системе
Было бы не плохо вычитать и делить научится.
Код:
1101 1101 |
+1111 *1111 |
------- ------ |
11100 1101 |
1101 |
1101 |
1101 |
--------- |
100111 |
100111 |
--------- |
11000011 |
Отредактировано tipsun (2011.11.25 09:09)