#1 2011.11.24 20:20

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

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

tipsun написал:

TLENS, ниче не понял smile

Код:

1
span style="color: #0000BB"><?phpecho '<pre>';echo 2 ^ 1; echo PHP_EOL; //3 bitsecho 25 ^ 5; echo PHP_EOL; //28 bitsecho 125 ^ 5; echo PHP_EOL; //120 bitsecho 125 ^ 25; echo PHP_EOL; //100 bitsecho '</pre>';?>

Или это не биты?

^ побитовое исключающее.

Например (echo 2 ^ 1; ) 2 в двоичной системе = 0010, а 1 = 0001
0010 ^ 0001 = 0011 (в десятичной это 3)
тоже самое echo  25 ^ 5; 25 = 11001 и 5 = 00101
11001 ^ 00101 = 11100 = 28 (десятичная система)

А  $x * pow(2, $n) == $x << $n;
Добавлено спустя   9 минут  7 секунд:
Давай же завали меня, вопросами. А то уже третий день над битами сижу а домашнего задания не сделаю.


Вложения

Отредактировано TLENS (2011.11.24 20:25)

Неактивен

#2 2011.11.24 20:31

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

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

Я извиняюсь.

Неактивен

#3 2011.11.24 20:32

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

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

За что?

Неактивен

#4 2011.11.24 20:33

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

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

TLENS написал:


Давай же завали меня, вопросами. А то уже третий день над битами сижу а домашнего задания не сделаю.

Неактивен

#5 2011.11.24 20:35

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

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

Гы, ты не правильно меня понял я наоборот говорю задавай вопросы. Как видишь ты нашел в моем коде ошибку.
Да и отвечая тебе я сам буду усваивать тему.
Добавлено спустя   1 минуту  2 секунды:
Просто тема сложная для меня я и неделю буду жевать пока не буду работать с ней как 2 + 2

Неактивен

#6 2011.11.24 20:37

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

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

А. smile

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

Неактивен

#7 2011.11.24 20:38

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

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

как видишь экзамен я тебе не здал. Ошибся на степени.

Неактивен

#8 2011.11.24 20:39

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

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

Ну так вот:

Код:

1
span style="color: #0000BB"><?phpecho 2 << (3 - 1); //число << степеньecho 3 << (3 - 1); //число << степеньecho 5 << (3 - 1); //число << степень//Для 2ки работает, а для остальных чисел не верно.?>

Еще степень должна дать исходное число при указании число в степени 1.
Еще степень должна дать 1 при указании число в степени 0.

Отредактировано tipsun (2011.11.24 20:42)

Неактивен

#9 2011.11.24 20:44

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

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

я за втыкал оно не переводит в степень а множит на 2 в степени.
Например.
x = 5;
n = 8;
a = x << n;
// то же самое что
b =  x * power (2, n);
a == b // в а то же самое что в b

Отредактировано TLENS (2011.11.24 20:44)

Неактивен

#10 2011.11.24 20:48

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

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

Код:

1
span style="color: #0000BB"><?php$x = 5;$n = 3;echo $x * pow(2, $n);/* это получается она переводит десятичноечисло в биты типа? Так надо теперь ихприбавить к исходному числу и перевести обратно.*/echo $x << $n;?>

Отредактировано tipsun (2011.11.24 20:50)

Неактивен

#11 2011.11.24 20:56

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

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

Переводить в любом случае не переводит.
Операторы ^, |, &, <<, >>, ~ они не переводят они работают напрямую с битом. т. е. ты смотришь на число 5 как на привычное число. Но машина на нее смотрит как на 0101 в полубайте или 0000 0101 в байте. И побитовыми операторами напрямую меняет заряд в нужных битах.
Добавлено спустя   1 минуту  18 секунд:
А pow работает тоже по битам но я не пойму как там реализовано без цыкла. я так понял по скорости работы она моментально вычитает.

Неактивен

#12 2011.11.24 21:01

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

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

Код:

1
span style="color: #0000BB"><?phpecho '<pre>';echo decbin(125); echo PHP_EOL;echo ' ' . decbin(5); echo PHP_EOL;echo 125 ^ 5; echo PHP_EOL;echo '</pre>';?>

Отредактировано tipsun (2011.11.24 21:01)

Неактивен

#13 2011.11.24 21:03

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

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

О спс не знал о их существовании. приходилось в ручную переводить.
Добавлено спустя   1 минуту  42 секунды:
<?php
echo          decbin(125); echo PHP_EOL;
echo '    ' . decbin(5);   echo PHP_EOL;
echo          decbin(125 ^ 5); echo PHP_EOL;

Неактивен

#14 2011.11.24 21:07

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

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

Да я сам наугад набрал только что smile

Код:

1
2
125 ^ 5 = 120
"1111101" ^ "101" = "1111000"

Неактивен

#15 2011.11.24 21:10

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

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

1111101 ^ 0000101 = 1111000;
как работает ^:
1) 1 ^ 0 = 1
2) 1 ^ 0 = 1
3) 1 ^ 0 = 1
4) 1 ^ 0 = 1
5) 1 ^ 1 = 0
6) 0 ^ 0 = 0
7) 1 ^ 1 = 0
Добавлено спустя   1 минуту  19 секунд:

tipsun написал:

Да я сам наугад набрал только что

Че правда?

Неактивен

#16 2011.11.24 21:12

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

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

Да, серьезно.

Неактивен

#17 2011.11.24 21:13

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

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

Ого а я около часа потратил на создания альтернативы и то глючную формулу нашел

Неактивен

#18 2011.11.24 21:14

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

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

Я наугад набрал dec потом [ctrl]+[space] нажал и там высветилась. (Notepad++)

Код:

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
The above example will output:
 
--------- --------- -- ---------
result value op test
--------- --------- -- ---------
Bitwise AND
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)
 
Bitwise Inclusive OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)
 
Bitwise Exclusive OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Отредактировано tipsun (2011.11.24 21:15)

Неактивен

#19 2011.11.24 21:17

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

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

Блин надо поставить какой то иде пыховский. наверное designer сейчас качну. А то в gmanagerе тестирую.
Добавлено спустя   9 минут  16 секунд:
tipsun интересная статья почитай http://chipenable.ru/index.php/programm … efine.html

Неактивен

#20 2011.11.24 22:04

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

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

Просто сместить мало.

Код:

1
span style="color: #0000BB"><?phpecho '<pre>';echo decbin(125); echo PHP_EOL;echo ' '. decbin(5 << (3 - 1)).'='. decbin(5) .'<<'. decbin(3 - 1); //конечное число = исходное число 5 возвести в степень 3echo '</pre>';/*1111101 10100=101<<10*/?>

Отредактировано tipsun (2011.11.24 22:06)

Неактивен

#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.015 s