#21 2011.11.24 22:06

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Разъяснение в битах.

Ну вообще то да

Неактивен

#22 2011.11.25 00:32

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Разъяснение в битах.

Кстати вот перевел так называемый всеми волшебный код "$a ^= $b ^= $a ^= $b;" (Замена двух переменных местами не используя третью переменную) в читаемый для человека.

Код:

1
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:38)

Неактивен

#23 2011.11.25 04:01

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Разъяснение в битах.

Паша помоги плис.

Упражнение 2.6. Напишите функцию setbits(x, p, n, y), возвращающую значение x, в котором n битов, начиная с p-й позиции, заменены на n правых разрядов из y (остальные биты не изменяются).

Я вот сделал функцию

Код:

1
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 2011.11.25 09:36

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Разъяснение в битах.

Я вот только складывать и умножать понял как в 2-чной системе smile
Было бы не плохо вычитать и делить научится.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
1101 1101
+1111 *1111
------- ------
11100 1101
1101
1101
1101
---------
100111
100111
---------
11000011

Отредактировано tipsun (2011.11.25 09:39)

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.012 s