title
Description
Body
tipsun написал:
TLENS, ниче не понял
Код:
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 16:25)
Неактивен
Гы, ты не правильно меня понял я наоборот говорю задавай вопросы. Как видишь ты нашел в моем коде ошибку.
Да и отвечая тебе я сам буду усваивать тему.
Добавлено спустя 1 минуту 2 секунды:
Просто тема сложная для меня я и неделю буду жевать пока не буду работать с ней как 2 + 2
Неактивен
Ну так вот:
|
|
Еще степень должна дать исходное число при указании число в степени 1.
Еще степень должна дать 1 при указании число в степени 0.
Отредактировано tipsun (2011.11.24 16:42)
Неактивен
я за втыкал оно не переводит в степень а множит на 2 в степени.
Например.
x = 5;
n = 8;
a = x << n;
// то же самое что
b = x * power (2, n);
a == b // в а то же самое что в b
Отредактировано TLENS (2011.11.24 16:44)
Неактивен
|
|
Отредактировано tipsun (2011.11.24 16:50)
Неактивен
Переводить в любом случае не переводит.
Операторы ^, |, &, <<, >>, ~ они не переводят они работают напрямую с битом. т. е. ты смотришь на число 5 как на привычное число. Но машина на нее смотрит как на 0101 в полубайте или 0000 0101 в байте. И побитовыми операторами напрямую меняет заряд в нужных битах.
Добавлено спустя 1 минуту 18 секунд:
А pow работает тоже по битам но я не пойму как там реализовано без цыкла. я так понял по скорости работы она моментально вычитает.
Неактивен
|
|
Отредактировано tipsun (2011.11.24 17:01)
Неактивен
О спс не знал о их существовании. приходилось в ручную переводить.
Добавлено спустя 1 минуту 42 секунды:
<?php
echo decbin(125); echo PHP_EOL;
echo ' ' . decbin(5); echo PHP_EOL;
echo decbin(125 ^ 5); echo PHP_EOL;
Неактивен
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 написал:
Да я сам наугад набрал только что
Че правда?
Неактивен
Я наугад набрал dec потом [ctrl]+[space] нажал и там высветилась. (Notepad++)
|
|
Отредактировано tipsun (2011.11.24 17:15)
Неактивен
Блин надо поставить какой то иде пыховский. наверное designer сейчас качну. А то в gmanagerе тестирую.
Добавлено спустя 9 минут 16 секунд:
tipsun интересная статья почитай http://chipenable.ru/index.php/programm … efine.html
Неактивен
Просто сместить мало.
|
|
Отредактировано tipsun (2011.11.24 18:06)
Неактивен
Кстати вот перевел так называемый всеми волшебный код "$a ^= $b ^= $a ^= $b;" (Замена двух переменных местами не используя третью переменную) в читаемый для человека.
|
|
Добавлено спустя 5 минут 20 секунд:
ЗЫ. Не работает с чаровскими типами т.e. только с int float и double (unsigned или signed)
Ну да и волшебный код теряет почему то два байта при работе со строкой
Отредактировано TLENS (2011.11.24 20:38)
Неактивен
Паша помоги плис.
Упражнение 2.6. Напишите функцию setbits(x, p, n, y), возвращающую значение x, в котором n битов, начиная с p-й позиции, заменены на n правых разрядов из y (остальные биты не изменяются).
Я вот сделал функцию
|
|
Все вроде нормально но когда в $x меньше битов чем в $y то все равно происходит сдвиг в право на $p - $n (48 символ) и вставка ^ $x & ~(~0 << $p - $n);
Можно ли этого избавится не используя переключателей и доп. переменных?
PS. Это не так уж и важно. Просто интерес.
Неактивен
Я вот только складывать и умножать понял как в 2-чной системе
Было бы не плохо вычитать и делить научится.
|
|
Отредактировано tipsun (2011.11.25 05:39)
Неактивен